5 Stimmen

Wie wird die Methode ToString() innerhalb einer Klasse außer Kraft gesetzt und formatiert?

Ich habe sowohl Google als auch diese Website durchsucht, um eine Antwort zu finden. Ich habe es auch in meinem Lehrbuch gelesen, aber ich verstehe immer noch nicht, wie es angewendet wird.

Hier ist, was ich weiß:

  • Es wird verwendet, um anzuzeigen, was ein Objekt über sich selbst weiß.

  • Sie kann verwendet werden, um die Ausgabe über das, was sie über sich selbst weiß, zu formatieren.

  • Sie muss in der zu verwendenden Methode außer Kraft gesetzt werden.

17voto

Teoman Soygul Punkte 25294

Sie denken, Sie haben eine Klasse wie:

public class Person
{
   public string FirstName { get; set;}
   public string LastName { get; set;}
   private string age;
}

Damit:

public override string ToString()
{
   return string.Format("[First Name: {0}; Last Name: {1}; Age: {2}]", FirstName, LastName, age);
}

werden alle Interna der Klasse offengelegt. Sie eignet sich am besten für den schnellen Abruf öffentlicher Felder der Klasse in einer vorformatierten Form (wodurch die in der Klasse gekapselten Daten effektiv in eine Zeichenkette umgewandelt werden).

Auch hier gibt es einen sehr nützlichen Rat aus dem Buch Pro C# 2010 und die .NET 4-Plattform : "Viele Klassen (und Strukturen), die Sie erstellen, können davon profitieren, ToString() zu überschreiben, um eine String-Textdarstellung des aktuellen Zustands des Typs zurückzugeben. Dies kann (unter anderem) für die Fehlersuche sehr hilfreich sein. Wie Sie diese Zeichenkette aufbauen, ist eine Frage der persönlichen Entscheidung; ein empfohlener Ansatz ist jedoch, jedes Name/Wert-Paar durch Semikolons zu trennen und die gesamte Zeichenkette in eckige Klammern zu packen. Denken Sie jedoch immer daran, dass eine korrekte ToString()-Überschreibung auch alle Daten berücksichtigen sollte, die in der Vererbungskette weiter oben definiert sind. Wenn Sie ToString() für eine Klasse überschreiben, die eine benutzerdefinierte Basisklasse erweitert, müssen Sie zunächst den ToString()-Wert von Ihrer Elternklasse mit dem Schlüsselwort base abrufen. Sobald Sie die String-Daten Ihrer Elternklasse erhalten haben, können Sie die benutzerdefinierten Informationen der abgeleiteten Klasse anhängen.

2voto

Andy White Punkte 83877

Die Basisklasse für alle .NET-Klassen ist die object Typ. Die Objektklasse bietet Ihnen eine Standardimplementierung von ToString() die standardmäßig nur den Namen der Klasse ausgibt, es sei denn, die Klasse hat die Funktion ToString() Methode, um etwas anderes zu drucken. Der Name der Klasse ist nicht besonders nützlich, daher ist es in der Regel eine gute Praxis, den Namen der Klasse zu überschreiben ToString() in jeder Klasse, die Sie schreiben, weil es nützlich ist, eine von Menschen lesbare Darstellung Ihrer Klasse bereitzustellen. Der Debugger wird tatsächlich Ihre ToString() Implementierung, wenn Sie eine Instanz Ihrer Klasse untersuchen wollen.

In Ihrer Klasse müssen Sie nur noch diese Methode hinzufügen:

public override string ToString()
{
    // return a string that has something to do with your class
}

Beispiel:

public class Person
{
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public int Age {get;set;}

    public override void ToString()
    {
        // return whatever makes sense here...
        return string.Format("[Person: FirstName={0}, LastName={1}, Age={2}]", FirstName, LastName, Age);
    }
}

Beachten Sie die string.Format Methode ist nur eine Möglichkeit, eine Zeichenkette zu erstellen. Das erste Argument von string.Format ist das "Format", das sowohl literalen Text als auch Platzhalter für Werte enthalten kann, die Sie als andere Argumente angeben. Die {0} , {1} y {2} oben sind Platzhalter für die Argumente Vorname, Nachname und Alter, die nach dem Format übergeben werden. Ich würde nachlesen über string.Format wenn Sie mehr wissen wollen.

1voto

KaeL Punkte 3619

Überschreiben Sie ToString() Methode:

public class Test
{
   public string FirstName { get; set; }

   public string LastName { get; set; }

   public override string ToString()
   {
      // Do your formatting here
      return LastName + ", " + FirstName;
   }
}

1voto

Jess Punkte 2943

Sie müssen ToString() in Ihrer Klasse außer Kraft setzen. Angenommen, ich habe eine Klasse mit m_nDays, m_nHours, m_nMinutes... dann könnte ich ToString() wie folgt überschreiben:

public override string ToString()
{
    return string.Format("{0,5}d - {1:00}:{2:00}", m_nDays, m_nHours, m_nMinutes);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X