2011-01-07 5 views
1

Ich habe eine Frage, die albern aussehen könnte. Gibt es einen bestimmten Grund hinter Methoden wie ToStrin(), GetHashCode(), GetType() usw. auf dem Basisobjekttyp zu definieren. Werden diese Methoden intern vom .NET-Framework für irgendeinen Zweck verwendet? Nur neugierig auf die Gedanken, die hinter diesem Design stecken.Was ist der Grund hinter Objekttyp mit Methoden wie ToString(), GetHashCode(), GetType usw.

Danke, sveerap

+1

erzeugt werden, wo sonst würden Sie ihnen sagen? –

+0

@Anon In einer Schnittstelle? Frage mit relevanter Antwort: http://stackoverflow.com/questions/1561617/edited-why-does-object-tostring-exist –

Antwort

5

Diese Methoden wurden als das Minimum aller Objekte betrachtet. Durch die Einführung in die Klasse System.Object sind sie für alle Objekte in .NET verfügbar.

Jeder dient einem Zweck:

  • Equals und ReferenceEquals verwendet werden, für die Gleichstellung
  • Überprüfung
  • GetHashCode können Objekte in einem Hash-Sammlungen
  • GetType zur Reflexion erforderlich verwendet werden, um Arbeit
  • ToString erlaubt alle Objekte, unabhängig vom Typ, in einer Zeichenkettenform darzustellen, was unglaublich nützlich ist
  • Finalize ermöglicht Ressourcen richtig vom Garbage Collector
  • MemberwiseClone ermöglicht flache Kopien von Objekten behandelt werden, um
+0

Danke für die Antwort und deckt die meisten grundlegenden Methoden und Gründe ab.Auf der Schnur gaben Brennan und PandaWood ausführlichere Erklärungen – sveerap

0
  • GetType() wird zum Vergleichsobjekt verwendet zur Reflexion
  • GetHashCode()
+0

Danke für die Antwort. Es wäre gut gewesen, wenn ich mehrere Antworten abgeben könnte, da jeder nützliche Ansichten geteilt hat. – sveerap

+0

GetHashCode() wird nicht für den Objektvergleich verwendet, obwohl es einen Vertrag hat, dass gleiche Objekte gleiche Hash-Codes haben. –

0

Die wichtigsten .NET-Sprachen nicht Duck Typing haben, Selbst wenn zwei verschiedene Klassen T1 und T2 Methoden namens "ToString" hätten, wäre es nicht möglich, Code zu schreiben, der auf ein Objekt des Typs T1 oder T2 einwirken kann. Aus diesem Grund werden Methoden, die üblicherweise von polymorphem Code verwendet werden, in Object deklariert. Und da die von Ihnen genannten Methoden für fast alle Klassen sinnvoll sind, kann das nicht wirklich schaden.

Bearbeiten: Tatsächlich unterstützt C# Ente Eingabe in seiner neuesten Inkarnation. Aber das zieht Reflektionsaufwand nach sich, und auch ToString und die Firma wurden definiert, lange bevor irgendjemand jemals daran gedacht hatte, C# -Entypen zu schreiben.

+0

In C# 4.0 unterstützt es die Eingabe von Enten mit dem dynamischen Schlüsselwort .. zB: private void test (dynamischer Test) { \t test.someMethod(); \t } – Rob

+0

Rechts. Hab nicht daran gedacht - ich habe nur 3.0 und darunter benutzt. Antwort auf Adresse bearbeiten –

+0

Danke für die Antwort. Es wäre gut gewesen, wenn ich mehrere Antworten abgeben könnte, da jeder nützliche Ansichten geteilt hat. – sveerap

Verwandte Themen