Ich habe mich immer gefragt, welche Design-Optionen zur Erstellung von ToString on Object in .NET führen.Warum ist ToString() für Object in .NET definiert?
Antwort
Die documentation gibt einen ziemlich klaren Zweck:
Object.ToString die wichtigsten Formatierungsmethode in .NET Framework ist. Es konvertiert ein Objekt in seine Zeichenfolgendarstellung, so dass es für die Anzeige geeignet ist.
Es auf Object
so alle Typen haben Implementierung zumindest eine Standard definiert ist. Es ist virtual
, daher können Typen ihre eigene Implementierung bereitstellen, wenn sie etwas anderes als den Klassennamen anzeigen möchten (ohne den tatsächlichen Typ kennen zu müssen). Numerische Typen überschreiben sie, so dass ihr Wert standardmäßig angezeigt werden kann.
Real World Praktikabilität von Anfang an gebacken. –
Was ist der Vorteil dieser Art von Design, anstatt ein separates Modul, das die gleiche Aufgabe erfüllt? Vielleicht eine statische .Parse on String wie Int und Double haben? – SurelyTheresABetterWay
@SurelyTheresABetterWay Sie können eine 'statische' Methode zum Beispiel nicht überschreiben, so dass Sie keine benutzerdefinierte Implementierung für benutzerdefinierte Typen haben könnten. –
Es muss zumindest eine Möglichkeit geben, eine Klasseninstanz visuell darzustellen, auch wenn nur der Klassenname angezeigt wird. Zum einen ermöglicht es die Überprüfung der Werte von Variablen. Wenn wir ?x
im unmittelbaren Fenster eingeben, ist die einzige Möglichkeit, den Wert anzuzeigen, wenn x
es als Zeichenfolge rendern soll.
Laut meiner Ausgabe von "Framework Design Guidelines" .ToString existiert, um das Debuggen zu erleichtern. Auf Seite 272 gibt es eine Diskussion über die beste Verwendung für diese Methode und darauf hinweisen, dass "... der Debugger es als die Standardmethode zum Anzeigen eines Objekts verwendet."
Ich glaube, das ist eine Richtlinie für _overriding_ 'ToString', nicht den Zweck von' ToString' selbst. Obwohl es eine gute _praktische_ Anwendung von ToString ist, geht der Zweck über das Debuggen hinaus. –
Was an diesem Buch nett ist, sind die Diskussionen und Kommentare der Autoren. Brian Pepin zum Beispiel wird mit den Worten zitiert: "Ich tendiere dazu, sehr vorsichtig mit ToString zu sein. Ich behandle es als eine Diagnose-API und verwende es selten für die Präsentation für Benutzer, es sei denn, ich weiß genau, wie es funktioniert ...", fährt er fort beschreibe einen bestimmten Fall, in dem es ihn gebissen hat. – n8wrl
- 1. Warum `Nil` als` Fall definiert object`
- 2. .NET ToString() Anzahl Kürzen
- 3. C# .net überschreiben ToString für multiD Array
- 4. Warum Object()! = Object() in JavaScript?
- 5. Was ist ToString ("N0") Format?
- 6. Warum ist event.namespace für Klickereignis nicht definiert?
- 7. Warum Methode toString() in Java
- 8. Warum ist rsize_t definiert?
- 9. Warum ist Object.prototype in Object false?
- 10. .NET Object Persistence Optionen
- 11. Warum ruft System.Exception.ToString virtuellen ToString nicht für innere Ausnahmen auf?
- 12. Warum funktioniert 2..toString()?
- 13. Warum ist string.Join (string, object []) speziell?
- 14. Warum kann ich ToString() nicht in VB projizieren?
- 15. Warum ist JSONObject.length nicht definiert?
- 16. Warum Observer nicht definiert ist
- 17. Warum ist COM (Component Object Model) sprachunabhängig?
- 18. Warum ist ReactRedux nicht definiert?
- 19. NET-Entity Framework Object Fehler
- 20. Wird toString auch für primitive Typen aufgerufen?
- 21. Was ist der Unterschied zwischen ToString ("D2") .ToString ("00") ist
- 22. Ist toString() nur zum Debuggen von Nutzen?
- 23. Verwendung von toString() für Komponententests in Java
- 24. Powershell Custom Object toString-Wert wird als Note-Eigenschaft verwendet
- 25. 100.toString vs 100 ['toString']
- 26. Warum ist es nicht erlaubt, toString() als Standardmethode zu verwenden?
- 27. Warum ist die Eigenschaft Dekorator nur für Klassen definiert?
- 28. Standard-Zahlenformat für ToString
- 29. ToString() für eine Klasseneigenschaft?
- 30. Warum wirft toString() für eine Objektinstanz (die null ist) keine NPE?
Wahrscheinlich, damit Sie 'ToString()' auf den Elementen einer vollständig heterogenen Sammlung aufrufen können, ohne überhaupt etwas über den dynamischen Typ des Objekts zu wissen, auf dem Sie es nennen. Es bietet auch eine (etwas) sinnvolle Standardimplementierung, die Ihnen beim Debuggen oder Protokollieren helfen kann. –
Willst du damit sagen, dass es irgendwo anders definiert werden sollte oder dass es nicht definiert werden sollte? –
+1. Ziemlich klar, diese Frage lautet: "Warum ist ToString() definiert" und die Dokumentation hat Besonderheiten, die nicht zu meinungsbasierten Antworten führen. Stimme nicht mit engen Stimmen überein. –