Erweiternde und eingrenzende Konvertierungen (Visual Basic)
Ein wichtiger Aspekt von Typkonvertierungen ist, ob das Ergebnis der Konvertierung innerhalb des Bereichs des Zieldatentyps liegt. Bei einer erweiternden Konvertierung wird ein Wert in einen Datentyp geändert, der alle möglichen Werte der ursprünglichen Daten enthalten kann. Bei einer eingrenzenden Konvertierung wird ein Wert in einen Datentyp geändert, der unter Umständen nicht alle möglichen Werte enthält.
Erweiternde Konvertierungen
In der folgenden Tabelle sind die standardmäßigen erweiternden Konvertierungen zusammengefasst.
Datentyp |
Erweiterung in Datentypen 1 |
SByte, Short, Integer, Long, Decimal, Single, Double |
|
Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Short, Integer, Long, Decimal, Single, Double |
|
UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Integer, Long, Decimal, Single, Double2 |
|
UInteger, Long, ULong, Decimal, Single, Double 2 |
|
Long, Decimal, Single, Double 2 |
|
ULong, Decimal, Single, Double 2 |
|
Decimal, Single, Double 2 |
|
Single, Double |
|
Double |
|
Beliebiger aufgelisteter Typ (Enum) |
Der zugrunde liegende ganzzahlige Typ und jeder Typ, in den der zugrunde liegende Typ erweitert wird |
Char, String |
|
Char-Array |
Char-Array, String |
Beliebiger Typ |
|
Beliebiger abgeleiteter Typ |
Beliebiger Basistyp, der der Ableitung zugrunde liegt 3 |
Beliebiger Typ |
Beliebige Schnittstelle, die implementiert wird |
Beliebiger Datentyp oder Objekttyp |
1 Per Definition wird jeder Datentyp in sich selbst erweitert.
2 Bei Konvertierungen von Integer, UInteger, Long, ULong oder Decimal in Single bzw. Double können zwar Ungenauigkeiten, aber niemals Größenverluste auftreten. In diesem Sinne tritt kein Informationsverlust auf.
3 Es mag überraschen, dass es sich bei der Konvertierung von einem abgeleiteten Typ in einen seiner Basistypen um eine erweiternde Konvertierung handelt. Dies ist der Fall, da der abgeleitete Typ alle Member des Basistyps enthält, sodass er als eine Instanz des Basistyps qualifiziert wird. Umgekehrt enthält der Basistyp nicht die vom abgeleiteten Typ definierten neuen Member.
Erweiternde Konvertierungen sind zur Laufzeit immer erfolgreich. Datenverluste treten hier nie auf. Sie können sie stets implizit ausführen, unabhängig davon, ob die Option Strict-Anweisung für die Typüberprüfung On oder Off festlegt.
Eingrenzende Konvertierungen
Es gibt die folgenden standardmäßigen eingrenzenden Konvertierungen:
Konvertierungen in die umgekehrte Richtung zu den erweiternden Konvertierungen in der obigen Tabelle (mit der Ausnahme, dass jeder Typ sich in sich selbst erweitert)
Konvertierungen in beide Richtungen zwischen Boolean und einem beliebigen numerischen Typ
Konvertierungen von einem beliebigen numerischen Typ in einen beliebigen Enumerationstyp (Enum)
Konvertierungen in beide Richtungen zwischen String und einem beliebigen numerischen Typ, Boolean oder Date
Konvertierungen von einem Datentyp oder Objekttyp in einen davon abgeleiteten Typ
Eingrenzende Konvertierungen sind zur Laufzeit nicht immer erfolgreich. Sie können fehlschlagen, oder es können Datenverluste auftreten. Ein Fehler tritt auf, wenn der Zieldatentyp nicht den konvertierten Wert empfangen kann. So kann bei einer numerischen Konvertierung beispielsweise ein Überlauf auftreten. Mit dem Compiler können Sie implizit keine eingrenzende Konvertierungen ausführen, es sei denn, die Option Strict-Anweisung setzt die Typüberprüfung auf Off.
Tipp
Der Fehler für einschränkende Konvertierung wird unterdrückt für Konvertierungen von den Elementen in einer For Each…Next-Auflistung zur Schleifensteuerungsvariable. Weitere Informationen und Beispiele finden Sie im Abschnitt "Eingrenzende Konvertierungen" unter For Each...Next-Anweisung (Visual Basic).
Verwendungsmöglichkeiten für eingrenzende Konvertierungen
Sie verwenden eingrenzende Konvertierungen, wenn Sie genau wissen, dass der Ausgangswert in den Zieldatentyp konvertiert werden kann, ohne dass dabei Fehler oder Datenverluste auftreten. Wenn z. B. bekannt ist, dass String die Werte "True" oder "False" enthält, können Sie den Typ mit dem CBool-Schlüsselwort in Boolean konvertieren.
Ausnahmen während der Konvertierung
Da erweiternde Konvertierungen immer erfolgreich sind, lösen sie keine Ausnahmen aus. Eingrenzende Konvertierungen lösen bei Fehlschlagen in der Regel die folgenden Ausnahmen aus:
InvalidCastException, wenn keine Konvertierung zwischen den beiden Typen definiert ist
OverflowException, (nur bei ganzzahligen Typen) wenn der konvertierte Wert für den Zieltyp zu groß ist
Wenn in einer Klasse oder Struktur eine CType-Funktion (Visual Basic) definiert ist, die als Operator für die Konvertierung in diese oder aus dieser Klasse bzw. Struktur dient, kann diese CType-Funktion eine geeignete Ausnahme auslösen. Zusätzlich kann CType ggf. Visual Basic-Funktionen oder .NET Framework-Methoden aufrufen, die wiederum verschiedene Ausnahmen auslösen können.
Siehe auch
Aufgaben
Gewusst wie: Konvertieren eines Objekts in einen anderen Typ in Visual Basic
Referenz
Datentyp: Zusammenfassung (Visual Basic)
Funktionen für die Typkonvertierung (Visual Basic)
Konzepte
Implizite und explizite Konvertierungen (Visual Basic)
Wertänderungen durch Konvertierungen (Visual Basic)
Konvertierungen zwischen Zeichenfolgen und anderen Typen (Visual Basic)
Arraykonvertierungen (Visual Basic)
Typenloses Programmieren in Visual Basic