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 |
Stellt die Visual Basic-Datentypen vor und beschreibt deren Verwendung. |
|
Listet die elementaren Datentypen auf, die von Visual Basic bereitgestellt werden. |
|
Erläutert die Typkonvertierung, bei der ein Wert aus einem Datentyp in einen anderen umgewandelt wird. |
|
Erläutert Strukturen, die benutzerdefinierte Typen darstellen, die mit dem Structure-Schlüsselwort deklariert sind. |
|
Beschreibt, wie die Ausführung mithilfe von Datentypen beschleunigt werden kann. |
|
Beschreibt den Object-Datentyp, mit dem auf Daten eines beliebigen Datentyps verwiesen werden kann. |