2016-06-05 7 views
2

In C#, was ist der Unterschied zwischen diesen:Was ist der Unterschied zwischen dem Überschreiben von ToString und dem Verwenden von impliziten/expliziten Konvertierungsoperatoren in C#?

public override string ToString() 
{ 
    return "Person: " + Name; 
} 

Und:

public static implicit/explicit operator string(Person person) 
{ 
    return "Person: " + Name; 
} 
+2

Semantics unterscheidet. Der Konvertierungsoperator sagt "in Zeichenkettentyp umwandeln" (wie bei jedem anderen Typ). 'ToString' bedeutet" geben Sie mir (normalerweise menschlich) lesbare Textdarstellung des Objekts. – AlexD

+0

Große Antwort! Können Sie es in eine Antwort setzen? :) – Sipo

+0

Nicht sicher, dass es eine Antwort verdient, aber wenn Sie wünschen :) .. – AlexD

Antwort

4

Semantics ist etwas anders.

Conversion operators sagen „bespannen konvertieren (oder ein anderer) Typ“:

C# Programmierer ermöglicht Konvertierungen auf Klassen oder Strukturen zu erklären, so dass Klassen oder Strukturen können und/oder aus anderen Klassen umgewandelt werden oder Strukturen oder Grundtypen.

Object.ToString soll

Eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

Bedeutung „mir geben (in der Regel Menschen) lesbare Textdarstellung des Objekts“.

(Ich sage nicht, aber, dass eine solche Semantik immer respektiert wird. Z. B. können Sie manchmal als Konvertierungsfunktionen verwendet werden ToString und FromString sehen.)

+0

Das erklärt das sehr gut! Große, schnelle Antwort! – Sipo

+0

Eine Frage: Wenn ich implizit in String umwandle, sollte ich auch 'ToString()' überschreiben? Da ich jedes Mal eine Instanz der Klasse in einem String-Kontext verwende wandelt in 'string' um (oder tut es?). – Sipo

+0

@Sipo" _in jeder Zeit, die ich eine Instanz der Klasse in einem String-Kontext verwende, wird automatisch in 'string'_ konvertiert" Nicht wirklich, 'ToString' wird normalerweise von Funktionen wie aufgerufen 'Console.WriteLine', die [' object'] erwartet (https://msdn.microsoft.com/en-us/library/system.object (v = vs.110) .aspx). BTW, der Debugger verwendet auch ' ToString ', wenn der Inhalt einer Klasseninstanz ausgegeben wird. Das Überschreiben von 'ToString' ist oft ein gute Übung. – AlexD

Verwandte Themen