Referenz- und Wert-Typen: Was ist der Unterschied in .NET?

Referenz-Typen speichern einen Verweis auf die Speicheradresse eines Werts auf dem Heap. Sie können selbstbeschreibende Typen, Zeiger-Typen oder Schnittstellen-Typen sein. Der Datentyp kann aus den Werten von selbstbeschreibenden Typen bestimmt werden. Selbstbeschreibende Typen unterteilen sich wiederum in Arrays und Klassen-Typen. Die Klassen-Typen sind benutzerdefinierte Klassen, per Boxing verpackte Wert-Typen und Methodenzeiger.

Das .NET-Framework enthält eine Vielzahl von Referenz-Typen. Beispiele sind das String-Objekt samt allen weiteren Arrays – auch wenn deren Elemente Wert-Typen sind -, Klassen-Typen und Methodenzeiger. Letztlich ist alles, was von der Objekt-Klasse erbt, ein Referenz-Typ. Das heißt, auch jedes erstellte Objekt ist ein Referenz-Typ.

Eine Möglichkeit zum Identifizieren eines Referenz-Typs besteht in der Verwendung des Schlüsselworts new, das nicht für Wert-Typen verwendet wird. Der folgende C#-Codeschnipsel zeigt das Erstellen eines StringBuilder-Objekts, das ein Referenz-Typ ist.


StringBuilder sb = new StringBuilder();

Wenn die Runtime-Engine auf Referenz-Typen stößt, weist sie ihnen zwei Speicherplätze zu: einen für das eigentliche Objekt (StringBuilder im obigen Beispiel) und einen für dessen Referenz (sb im obigen Beispiel). Das eigentliche Objekt wird auf dem verwalteten Heap abgelegt, so dass es vom Speicherbereiniger erfasst wird. Die dispose-Methode findet Verwendung, um den belegten Speicher freizugeben und das Objekt für den Speicherbereiniger verfügbar zu machen.

Andererseits wird die Referenz auf das Objekt auf dem Stack gespeichert. Wenn man Referenz-Typen benutzt, wird das Schlüsselwort ref sowohl in der Methodensignatur als auch beim Aufruf in C# verwendet. Dadurch registriert das System, dass eine Referenz auf das Objekt vorhanden ist. In VB.NET wird ByRef in der Methodensignatur verwendet, beim Aufruf der Methode hingegen nichts.

Was charakterisiert Wert-Typen?

Vereinfacht ausgedrückt enthält ein Wert-Typ seine eigenen Daten. Darüber hinaus werden sie entweder auf dem Stack oder direkt innerhalb einer Struktur gespeichert. Wert-Typen können integriert, also von der Runtime-Engine implementiert, benutzerdefiniert oder aufgelistet sein.

Das .NET-Framework enthält zahlreiche integrierte Wert-Typen. Beispiele sind alle numerischen Datentypen, die Klassen Boolean, Char und Date sowie alle Strukturen, auch wenn deren Mitglieder Referenz-Typen sind, sowie Auflistungen. Wert-Typen erben direkt von der System.ValueType-Klasse. Allerdings sind Wert-Typen versiegelt. Es lassen sich also keine anderen Klassen von ihnen ableiten.

Auf Wert-Typen wird direkt zugegriffen. Daher findet das Schlüsselwort new keine Verwendung. Das folgende VB.NET-Codebeispiel demonstriert die Erstellung einer Reihe von Wert-Typen.


Dim counter As Integer
Dim finished As Boolean;
counter = 1;
finished = false;

Da Wert-Typen auf dem Stack gespeichert werden, erfasst sie der Speicherbereiniger nicht. Wenn die .NET-Runtime mit Wert-Typen arbeitet, verwendet sie direkt die zugrundeliegenden Daten. Wert-Typen bezeichnet man auch gerne als leichtere Typen, im Unterschied zu den schwereren Referenz-Typen.

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Black Friday: Vorsicht vor schädlichen QR-Codes

Bösartige QR-Codes, die per E-Mail versendet werden, eignen sich sehr gut, um Spam-Filter zu umgehen.

12 Stunden ago

Black Friday: Zahl der ominösen Shopping-Websites steigt

Unsichere Websites und Phishing-Mails in Verbindung mit Black Friday können kauffreudigen Konsumenten zum Verhängnis werden.

12 Stunden ago

SmokeBuster bekämpft SmokeLoader

Malware SmokeLoader wird weiterhin von Bedrohungsakteuren genutzt, um Payloads über neue C2-Infrastrukturen zu verbreiten.

19 Stunden ago

Taugen Kryptowährungen als Unterstützer der Energiewende?

Bankhaus Metzler und Telekom-Tochter MMS testen, inwieweit Bitcoin-Miner das deutsche Stromnetz stabilisieren könnten.

1 Tag ago

Supercomputer-Ranking: El Capitan überholt Frontier und Aurora

Mit 1,7 Exaflops ist El Capitan nun der dritte Exascale-Supercomputer weltweit. Deutschland stellt erneut den…

2 Tagen ago

Ionos führt neue AMD-Prozessoren ein

Der deutsche Hyperscaler erweitert sein Server-Portfolio um vier Angebote mit den neuen AMD EPYC 4004…

2 Tagen ago