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

Apple meldet Rekordumsatz im vierten Fiskalquartal

Die Einnahmen klettern auf fast 95 Milliarden Dollar. Allerdings belastet der Steuerstreit mit der EU…

2 Tagen ago

Microsoft steigert Umsatz und Gewinn im ersten Fiskalquartal

Das stärkste Wachstum verbucht die Cloud-Sparte. Microsoft verpasst bei der Umsatzprognose für das laufende Quartal…

2 Tagen ago

Bezahlkarten: Infineon verspricht weniger Plastikmüll

Ein Coil-on-Module-Package integriert Chip und Antenne, was den Kartenkörper fast vollständig recycelbar machen soll.

3 Tagen ago

Firefox 132 schließt elf Sicherheitslücken

Mindestens eine Anfälligkeit erlaubt das Einschleusen von Schadcode. Außerdem erweitern die Entwickler den Support für…

3 Tagen ago

Telekom nennt Termin für 2G-Ende

Zum 30. Juni 2028 soll das 2G-Netz komplett abgeschaltet werden und den Weg für schnellere…

3 Tagen ago

Alphabet übertrifft die Erwartungen im dritten Quartal

Gewinn und Umsatz legen deutlich zu. Zum Wachstum tragen auch die Sparten Cloud und Abonnements…

3 Tagen ago