Wert- und Verweistypen

In Visual Basic gibt es zwei Arten von Typen: Verweistypen und Werttypen. Variablen von Verweistypen speichern Verweise auf ihre Daten (Objekte), während Variablen von Werttypen ihre Daten direkt enthalten. Bei Verweistypen können zwei Variablen auf dasselbe Objekt verweisen. Daher können auf eine Variable angewendete Operationen das Objekt beeinflussen, auf das von der anderen Variablen verwiesen wird. Bei Werttypen besitzt jede Variable eine eigene Kopie der Daten, und auf eine Variable angewendete Operationen können die andere Variable nicht beeinflussen (außer im Fall des ByRef-Modifizierers für Parameter).

Werttypen

Ein Datentyp ist ein Werttyp, wenn die Daten in seiner eigenen Speicherbelegung enthalten sind. Werttypen umfassen Folgendes:

  • Alle numerischen Datentypen

  • Boolean, Char und Date

  • Alle Strukturen, auch wenn ihre Member Verweistypen sind

  • Enumerationen, da ihr zugrunde liegender Typ immer SByte, Short, Integer, Long, Byte, UShort, UInteger oder ULong ist

Jede Struktur ist ein Werttyp, auch wenn sie Verweistypmember enthält. Aus diesem Grund werden Werttypen wie Char und Integer von .NET Framework-Strukturen implementiert.

Werttypen können mithilfe des reservierten Schlüsselworts (beispielsweise Decimal) deklariert werden. Mit dem New-Schlüsselwort können Sie einen Werttyp initialisieren. Dies ist besonders nützlich, wenn der Typ über einen Konstruktor verfügt, der Parameter akzeptiert. Ein Beispiel hierfür ist der Decimal(Int32, Int32, Int32, Boolean, Byte)-Konstruktor, der auf der Grundlage der bereitgestellten Teile einen neuen Decimal-Wert erstellt.

Verweistypen

Ein Verweistyp speichert einen Verweis auf die zugehörigen Daten. Verweistypen umfassen Folgendes:

  • String

  • Alle Arrays, auch wenn ihre Elemente Werttypen sind

  • Klassentypen wie Form

  • Delegaten

Eine Klasse ist ein Verweistyp. Beachten Sie, dass jedes Array ein Verweistyp ist, auch wenn seine Member Werttypen sind.

Da jeder Verweistyp eine zugrunde liegende .NET Framework-Klasse darstellt, muss bei der Initialisierung das Schlüsselwort des New-Operators verwendet werden. Die folgende Anweisung initialisiert ein Array:

Dim totals() As Single = New Single(8) {}  

Elemente, die keine Typen sind

Die folgenden Programmierelemente gelten nicht als Typen, da sie nicht als Datentyp für ein deklariertes Element angegeben werden können:

  • Namespaces

  • Module

  • Ereignisse

  • Eigenschaften und Prozeduren

  • Variablen, Konstanten und Felder

Verwenden des Object-Datentyps

Sie können einer Variablen des Object-Datentyps entweder einen Verweistyp oder einen Werttyp zuweisen. Eine Object-Variable enthält immer einen Verweis auf die Daten, niemals die Daten selbst. Wenn Sie einer Object-Variablen jedoch einen Werttyp zuweisen, verhält sie sich so, als enthielte sie ihre eigenen Daten. Weitere Informationen finden Sie unter Object Data Type (Object-Datentyp).

Wenn Sie ermitteln möchten, ob eine Object-Variable als Verweistyp oder als Werttyp fungiert, können Sie sie an die IsReference-Methode in der Information-Klasse des Microsoft.VisualBasic-Namespace übergeben. Information.IsReference gibt True zurück, wenn der Inhalt der Object-Variablen einen Verweistyp darstellt.

Weitere Informationen