16 Stimmen

Erben Werttypen (Integer, Decimal, Boolean, usw.) von Object?

Auf der Suche nach Klarstellung zu diesem Thema...

Ich habe gehört, dass in .Net 'alles' von Object erbt. Ich habe auch gehört, dass der Unterschied zwischen Werttypen und Referenztypen darin besteht, dass Referenztypen von Object erben und Werttypen nicht.

Mein Verständnis war, dass alles ein Objekt ist (von System.Object erbt); aber Werttypen und Referenztypen einfach 'unterschiedlich' voneinander sind. Werttypen werden auf dem Stapel allokiert und Referenztypen erhalten einen 'Zeiger', der auf dem Stapel platziert ist und auf eine Adresse auf dem Heap zeigt.

Ist das das Wesentliche daran? Was macht einen Integer zu einem Werttyp? Ist das etwas, das in der Sprache angeboren ist?

3voto

CesarGon Punkte 14851

Ja, Werttypen erben von Object.

Siehe den Abschnitt Vererbungshierarchie hier: http://msdn.microsoft.com/en-us/library/system.valuetype.aspx

Der Abschnitt Bemerkungen auf derselben Seite sagt wörtlich:

Sowohl Referenz- als auch Werttypen stammen von der obersten Basisklasse Object ab.

2voto

jason Punkte 227577

Kurz gesagt stammt nicht alles von object ab, es gibt Ausnahmen. Dieser Blog-Beitrag von Eric Lippert ist wahrscheinlich die beste Referenz zu diesem Thema: "Nicht alles stammt von object ab"

Alle structs leiten implizit von System.ValueType ab.

Der Unterschied zwischen Werttypen und Verweistypen ist eine semantische Frage: Werttypen zeigen Wertsemantik auf, während Verweistypen auf Wertsemantik verweisen. Implementierungsdetails (wie wo sie zugewiesen werden usw.) sind nicht wichtig.

ints sind zum Beispiel Werttypen, weil sie structs sind. Natürlich modellieren wir ints als Werttypen, weil sie Werte repräsentieren und wir Wertsemantik wollen, nicht Verweissemantik.

2voto

dtroy Punkte 1157

from MSDN: (http://msdn.microsoft.com/en-us/library/s1ax56ch%28VS.71%29.aspx)

Werttypen

Die Werttypen bestehen aus zwei Hauptkategorien:

* Strukturtyp
* Aufzählungstyp

Die Strukturtypen enthalten die benutzerdefinierten Strukturtypen und die folgenden eingebauten einfachen Typen:

* Numerische Typen
      o Ganzzahlige Typen
      o Gleitkomma-Typen
      o Dezimal
* bool

Hauptmerkmale von Werttypen

Eine Variable eines Werttyps enthält immer einen Wert dieses Typs. Die Zuweisung an eine Variable eines Werttyps erstellt eine Kopie des zugewiesenen Werts, während die Zuweisung an eine Variable eines Verweistyps eine Kopie des Verweises, jedoch nicht des referenzierten Objekts, erstellt.

Alle Werttypen leiten sich implizit von der Klasse Object ab.

Im Gegensatz zu Verweistypen ist es nicht möglich, einen neuen Typ von einem Werttyp abzuleiten. Allerdings können, wie bei Verweistypen, Strukturen Schnittstellen implementieren.

Im Gegensatz zu Verweistypen ist es für einen Werttyp nicht möglich, den Nullwert zu enthalten.

Jeder Werttyp hat einen impliziten Standardkonstruktor, der den Standardwert dieses Typs initialisiert. Informationen zu den Standardwerten von Werttypen finden Sie in der Tabelle der Standardwerte.

Hauptmerkmale von einfachen Typen

Alle einfachen Typen sind Aliase der .NET Framework-Systemtypen. Zum Beispiel ist int ein Alias von System.Int32. Eine vollständige Liste der Aliase finden Sie in der Tabelle der integrierten Typen.

Konstantenausdrücke, deren Operanden alle einfache Typen sind, werden zur Kompilierungszeit ausgewertet. Weitere Informationen finden Sie unter 7.15 Konstantenausdrücke.

Einfache Typen können mit Literalkonstanten initialisiert werden. Zum Beispiel ist 'A' ein Literal des Typs char und 2001 ein Literal des Typs int.

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