Datentypimplementierung (Visual Basic)

Jeder elementare Datentyp in Visual Basic wird von einer Struktur oder Klasse im System-Namespace unterstützt. Der Compiler verwendet jedes Datentypschlüsselwort als Alias für die zugrunde liegende Struktur oder Klasse. Wenn Sie eine Variable z. B. mit dem reservierten Wort Byte deklarieren, hat dies denselben Effekt, als wenn Sie den voll qualifizierten Strukturnamen System.Byte verwenden.

In Visual Basic werden Datentypen entsprechend ihrer Klassifizierung implementiert. Die Visual Basic-Datentypen können in Abhängigkeit davon klassifiziert werden, ob von einer Variablen eines bestimmten Typs eigene Daten oder ein Zeiger auf die Daten gespeichert werden. Wenn der Datentyp eigene Daten speichert, ist es ein Werttyp. Wenn er einen Zeiger auf die Daten an einer anderen Stelle im Speicher enthält, ist es ein Verweistyp.

Werttypen

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

  • Alle numerischen Datentypen

  • Boolean, Char und Date

  • Alle Strukturen, auch wenn ihre Member Verweistypen sind

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

Alle Strukturen sind Werttypen, auch wenn sie Verweistypmember besitzen. Daher werden Werttypen wie Char und Integer von .NET Framework-Strukturen implementiert.

Werttypen können mit dem reservierten Schlüsselwort deklariert werden, z. B. mit Decimal. Sie können das New-Schlüsselwort auch verwenden, um einen Werttyp zu initialisieren. Dies ist besonders nützlich, wenn der Typ einen Konstruktor besitzt, der Parameter verwendet. Ein Beispiel dafür ist der Decimal(Int32, Int32, Int32, Boolean, Byte)-Konstruktor, der einen neuen Decimal-Wert aus den bereitgestellten Teilen erstellt.

Verweistypen

Ein Verweistyp enthält einen Zeiger auf einen anderen Speicherort, der die Daten enthält. Verweistypen umfassen Folgendes:

  • String

  • Alle Arrays, auch wenn ihre Elemente Werttypen sind

  • Klassentypen, z. B. Form

  • Delegaten

Eine Klasse ist ein Verweistyp. Daher werden Verweistypen wie Object und String von .NET Framework-Klassen unterstützt. Beachten Sie, dass jedes Array einen Referenztyp darstellt, auch wenn seine Member Werttypen sind.

Da jeder Referenztyp eine zugrunde liegende .NET Framework-Klasse darstellt, müssen Sie bei der Initialisierung das Schlüsselwort Operator New (Visual Basic) verwenden. Mit der folgenden Anweisung wird ein Array initialisiert.

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

Zusätzliche in .NET Framework verfügbare Typen

Die Common Language Runtime (CLR) unterstützt auch Strukturen und Klassen, die in Visual Basic nicht zur Verfügung stehen. Die System.Guid-Struktur stellt beispielsweise einen global eindeutigen Bezeichner (GUID - Globally Unique Identifier) zur Verfügung, und die System.TimeZone-Klasse unterstützt eine Zeitzone. Sie können diese Typen zum Deklarieren von Variablen und Konstanten verwenden und auf die Methoden zugreifen, die von .NET Framework für diese Typen implementiert werden. Visual Basic unterstützt jedoch keine Vorgänge oder Typkonvertierungen mit fremden Typen.

Elemente, die keine Typen sind

Die folgenden Programmierelemente sind keine Typen, weil Sie keines dieser Elemente als Datentyp für ein deklariertes Element angeben können:

  • Namespaces

  • Module

  • Ereignisse

  • Eigenschaften und Prozeduren

  • Variablen, Konstanten und Felder

Arbeiten mit dem Object-Datentyp

Sie können einer Variablen vom Datentyp Object entweder einen Verweistyp oder einen Werttyp zuweisen. Eine Object-Variable enthält immer einen Zeiger auf die Daten, nie die Daten an sich. Wenn Sie jedoch einer Object-Variablen einen Werttyp zuweisen, verhält sie sich so, als enthielte sie eigene Daten. Weitere Informationen finden Sie unter Object-Datentyp.

Sie können ermitteln, ob einer Object-Variablen ein Verweistyp oder ein Werttyp zugewiesen ist, indem Sie diese an die IsReference-Methode der Information-Klasse im Microsoft.VisualBasic-Namespace übergeben. Information.IsReference gibt True zurück, wenn der Inhalt der Object-Variablen einen Verweistyp darstellt.

Datentypen verfügen über Member

Da sie von .NET Framework-Strukturen und -Klassen unterstützt werden, besitzen Visual Basic-Datentypen Member. Dazu gehören Konstruktoren, Methoden, Eigenschaften und Felder. Sie können auf die Member (mit Ausnahme der Konstruktoren) für eine Variable genau so wie auf Methoden und Eigenschaften für ein Objekt zugreifen.

Im folgenden Beispiel werden die Eigenschaften Year, Month und Day sowie die DaysInMonth-Methode der System.DateTime-Struktur verwendet, um die verbleibende Anzahl von Tagen im aktuellen Monat zu ermitteln.

Dim current As Date = Now
Dim daysRemaining As Integer
daysRemaining = Date.DaysInMonth(current.Year, current.Month) - current.Day

Beachten Sie, dass Sie einen Verweis auf einen Datentypmember entweder mit dem Namen des Typs (Date) oder dem Namen einer Variablen qualifizieren müssen, die als dieser Typ deklariert wurde (current).

Beispiele der Datentypmember

In den folgenden Codeprototypen werden einige der nützlichen Methoden, Eigenschaften und Felder für die Datentypen veranschaulicht.

<Char>.IsDigit() ' Returns True if character is a numeric digit.

<Char>.IsLower() ' Returns True if character is a lowercase letter.

<Date>.IsLeapYear() ' Returns True if current year is a leap year.

<Date>.ToUniversalTime() ' Returns local date/time converted to UTC.

<Double>.IsInfinity() ' Returns True if contents represent infinity.

<Double>.IsNaN() ' Returns True if contents are not a number (0/0).

<Long>.MaxValue ' Constant representing largest positive Int64 value.

<Object>.GetType() ' Returns Type object representing type of <Object>.

<Object>.GetType().GetTypeCode() ' Returns type code of <Object>.

<String>.Chars(<index>) ' Character at position <index> of <String>.

<String>.Length ' Number of characters currently in <String>.

Alle numerischen Typen, einschließlich Byte und Char, machen die öffentlichen Felder MaxValue und MinValue verfügbar, was bei der Verwendung dieser Typen sehr hilfreich sein kann.

Äquivalenz der Datentypmember ist nicht gewährleistet

.NET Framework bietet auch verschiedene Methoden für Datentypen, die den Anschein erwecken, Visual Basic-Funktionen und -Schlüsselwörtern zu entsprechen. Allerdings verwendet Visual Basic für Konvertierungen oder andere Vorgänge nicht immer die .NET Framework-Methoden, und die Ergebnisse stimmen nicht immer überein.

Die ToSingle-Methode hat dieselbe Funktion wie das CSng-Schlüsselwort für einen Decimal-Ausdruck. Es kann jedoch nicht gewährleistet werden, dass CSng den System.Datentyp.ToSingle verwendet. Daher können die Ergebnisse in Grenzfällen oder unter Ausnahmebedingungen abweichen.

Im Allgemeinen sollten Sie die Visual Basic-Programmierelemente verwenden, da sie einfacher zu handhaben sind und der Code damit besser lesbar ist. In einigen Fällen können zusätzliche Funktionen erforderlich sein, die durch .NET Framework-Methoden bereitgestellt werden. Ein Beispiel dafür finden Sie unter "Der Operator 'Mod' gibt kein präzises Ergebnis zurück" unter Problembehandlung bei Datentypen (Visual Basic).

Verwandte Abschnitte

Ausdruck

Definition

Datentypen in Visual Basic

Stellt die Visual Basic-Datentypen vor und beschreibt deren Verwendung.

Datentyp: Zusammenfassung (Visual Basic)

Listet die elementaren Datentypen auf, die von Visual Basic bereitgestellt werden.

Typkonvertierung in Visual Basic

Erläutert die Typkonvertierung, bei der ein Wert aus einem Datentyp in einen anderen umgewandelt wird.

Strukturen (Visual Basic)

Erläutert Strukturen, die benutzerdefinierte Typen darstellen, die mit dem Structure-Schlüsselwort deklariert sind.

Effiziente Verwendung von Datentypen (Visual Basic)

Beschreibt, wie die Ausführung mithilfe von Datentypen beschleunigt werden kann.

Object-Datentyp

Beschreibt den Object-Datentyp, mit dem auf Daten eines beliebigen Datentyps verwiesen werden kann.

Verweise

Boolean

Byte

Char

DateTime

Decimal

Double

Guid

TimeZone