2016-04-18 4 views
-3

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?

+0

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. –

+0

Willst du damit sagen, dass es irgendwo anders definiert werden sollte oder dass es nicht definiert werden sollte? –

+0

+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. –

Antwort

2

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.

+0

Real World Praktikabilität von Anfang an gebacken. –

+0

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

+0

@SurelyTheresABetterWay Sie können eine 'statische' Methode zum Beispiel nicht überschreiben, so dass Sie keine benutzerdefinierte Implementierung für benutzerdefinierte Typen haben könnten. –

0

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.

0

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."

+1

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. –

+0

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

Verwandte Themen