Datentyp: Zusammenfassung (Visual Basic)
In der folgenden Tabelle sind die Visual Basic-Datentypen, ihre unterstützenden Common Language Runtime-Typen, ihre nominale Speicherzuordnung und ihre Wertbereiche aufgeführt.
Visual Basic-Typ | Common Language Runtime-Typstruktur | Nominale Speicherzuteilung | Wertebereich |
---|---|---|---|
Boolescher Wert | Boolean | Abhängig von der Implementierung der Plattform | True oder False |
Byte | Byte | 1 Byte | 0 bis 255 (ohne Vorzeichen) |
Char (einzelnes Prozentzeichen) | Char | 2 Bytes | 0 bis 65535 (ohne Vorzeichen) |
Date | DateTime | 8 Byte | 0:00:00 (Mitternacht), 1. Januar 0001 bis 23:59:59, 31. Dezember 9999 |
Decimal | Decimal | 16 Bytes | 0 bis +/–79,228,162,514,264,337,593,543,950,335 (+/–7.9...E+28) † ohne Dezimaltrennzeichen; 0 bis +/–7.9228162514264337593543950335 mit 28 Stellen rechts vom Dezimalkomma; die kleinste Zahl ungleich 0 lautet +/–0.0000000000000000000000000001 (+/–1E-28) † |
Double (Gleitkomma mit doppelter Genauigkeit) | Double | 8 Byte | -1.79769313486231570E+308 bis -4,94065645841246544E-324 † für negative Werte; 4.94065645841246544E-324 bis 1.79769313486231570E+308 † für positive Werte |
Integer | Int32 | 4 Byte | -2.147.483.648 bis 2.147.483.647 (mit Vorzeichen) |
Long (Long Integer) | Int64 | 8 Byte | -9.223.372.036.854.775.808 bis 9.223.372.036.854.775.807 (9.2...E+18 †) (mit Vorzeichen) |
Object | Object (Klasse) | 4 Bytes auf einer 32-Bit-Plattform 8 Bytes auf einer 64-Bit-Plattform |
In einer Variablen vom Typ Object kann jeder beliebige Typ gespeichert werden |
SByte | SByte | 1 Byte | -128 bis 127 (mit Vorzeichen) |
Short (Short Integer) | Int16 | 2 Bytes | -32,768 bis 32,767 (mit Vorzeichen) |
Single (Gleitkomma mit einfacher Genauigkeit) | Single | 4 Byte | -3.4028235E+38 bis -1.401298E-45 † für negative Werte; 1.401298E-45 bis 3.4028235E+38 † für positive Werte |
String (variable Länge) | String (Klasse) | Abhängig von der Implementierung der Plattform | 0 bis ca. 2 Milliarden Unicode-Zeichen |
UInteger | UInt32 | 4 Byte | 0 bis 4,294,967,295 (ohne Vorzeichen) |
ULong | UInt64 | 8 Byte | 0 bis 18,446,744,073,709,551,615 (1.8...E+19 †) (ohne Vorzeichen) |
Benutzerdefiniert (Struktur) | (erbt von ValueType) | Abhängig von der Implementierung der Plattform | Jeder Member in der Struktur hat einen Wertbereich, der von seinem Datentyp bestimmt wird. Dieser ist unabhängig von den Wertbereichen der anderen Member |
UShort | UInt16 | 2 Bytes | 0 bis 65,535 (ohne Vorzeichen) |
† In der wissenschaftlichen Notation bezieht sich „E“ auf eine Potenz von 10. 3,56E+2 bedeutet also 3,56 x 102 oder 356, und 3,56E-2 bedeutet 3,56 / 102 oder 0,0356.
Hinweis
Verwenden Sie für Zeichenfolgen, die Text enthalten, die StrConv-Funktion, um von einem Textformat in ein anderes zu konvertieren.
Zusätzlich zum Angeben eines Datentyps in einer Deklarationsanweisung können Sie den Datentyp einiger Programmierelemente mit einem Typzeichen erzwingen. Siehe Typzeichen.
Speicherverbrauch
Wenn Sie einen elementaren Datentyp deklarieren, kann nicht davon ausgegangen werden, dass der Arbeitsspeicherverbrauch mit der nominalen Speicherbelegung übereinstimmt. Dies ist auf die folgenden Überlegungen zurückzuführen:
Speicherzuweisung. Die Common Language Runtime kann Speicher basierend auf den aktuellen Merkmalen der Plattform zuweisen, auf der Ihre Anwendung ausgeführt wird. Wenn der Arbeitsspeicher fast voll ist, kann es sein, dass die deklarierten Elemente so eng wie möglich zusammengepackt werden. In anderen Fällen können die Speicheradressen an natürlichen Hardwaregrenzen ausgerichtet werden, um die Leistung zu optimieren.
Plattformbreite. Die Speicherzuweisung auf einer 64-Bit-Plattform unterscheidet sich von der Zuweisung auf einer 32-Bit-Plattform.
Zusammengesetzte Datentypen
Die gleichen Überlegungen gelten für jeden Member eines zusammengesetzten Datentyps, z. B. für eine Struktur oder ein Array. Sie können sich nicht darauf verlassen, die nominalen Speicherbelegungen der Member des Typs einfach zu addieren. Darüber hinaus gibt es weitere Überlegungen, z. B. die folgenden:
Mehraufwand. Einige zusammengesetzte Typen haben zusätzliche Arbeitsspeicheranforderungen. Beispielsweise verwendet ein Array zusätzlichen Arbeitsspeicher für das Array selbst und auch für jede Dimension. Auf einer 32-Bit-Plattform beträgt dieser Mehraufwand derzeit 12 Bytes plus 8 Bytes für jede Dimension. Auf einer 64-Bit-Plattform wird diese Anforderung verdoppelt.
Speicherlayout. Sie können nicht davon ausgehen, dass die Member im Speicher in derselben Reihenfolge wie in der Deklaration angeordnet sind. Sie können nicht einmal Annahmen über die Byteausrichtung treffen, z. B. eine 2-Byte- oder 4-Byte-Grenze. Wenn Sie eine Klasse oder Struktur definieren und das Speicherlayout ihrer Member steuern müssen, können Sie das StructLayoutAttribute-Attribut auf die Klasse oder Struktur anwenden.
Objektmehraufwand
Ein Object
, das auf einen beliebigen elementaren oder zusammengesetzten Datentyp verweist, verwendet zusätzlich zu den im Datentyp enthaltenen Daten 4 Bytes.