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

Starbucks von Cyberattacke betroffen

Ransomware-Angriff auf die KI-gesteuerte Lieferkettenplattform Blue Yonder hat weitreichende Auswirkungen.

12 Stunden ago

Was kann die Apple Watch Series 10?

Seit Ende September ist sie also verfügbar: die Apple Watch 10. Auch in Deutschland kann…

17 Stunden ago

Microsoft-Clouds: GenAI verändert Servicegeschäft

ISG sieht engere Vernetzung zwischen Hyperscaler, IT-Partnern und Endkunden. Treiber ist das Zusammenspiel von KI…

17 Stunden ago

Agentforce Testing Center: Management autonomer KI-Agenten

Mit dem Tool können Unternehmen KI-Agenten mithilfe synthetisch generierter Daten testen, um präzise Antworten und…

2 Tagen ago

NiPoGi AM06 PRO Mini PC: Perfekte Kombination aus Leistung, Flexibilität und Portabilität

Kostengünstiger Mini-PC mit AMD Ryzen 7 5825U-Prozessor, 16 GB Arbeitsspeicher (RAM) und 512 GB SSD.

2 Tagen ago

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.

5 Tagen ago