Erweiternde und eingrenzende Konvertierungen (Visual Basic)
Ein wichtiger Aspekt von Typkonvertierungen ist, ob das Ergebnis der Konvertierung innerhalb des Bereichs des Zieldatentyps liegt.
Eine erweiternde Konvertierung wird ein Wert in einen Datentyp, der einen beliebigen Wert der ursprünglichen Daten zulassen kann. Bei erweiternden Konvertierungen bleibt der Wert erhalten, seine Darstellung wird jedoch geändert. Dies geschieht, wenn Sie mit einem ganzzahligen Typ zu konvertieren Decimal, oder Char zu Stringauf.
Bei einer eingrenzenden Konvertierung wird ein Wert in einen Datentyp geändert, der unter Umständen nicht alle möglichen Werte enthält. Beispielsweise wird ein Brucher Wert gerundet, wenn er zu einem ganzzahligen Typ konvertiert werden und ein numerischer Typ, der in Boolean konvertiert wird, ist entweder True oder Falsereduziert.
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 ganzzahliger 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, von dem er abgeleitet 3ist. |
Beliebiger Typ |
Beliebige Schnittstelle, die sie implementiert. |
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.
Hinweis
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 Sie beispielsweise String verfügen, das Sie enthalten entweder „True“ oder „False“ bekannt, können Sie das CBool-Schlüsselwort verwenden, um es zu Booleanzu 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.
Veränderungen bei der Konvertierung von Verweistypen
Bei der Konvertierung eines Verweistyps wird nur der Zeiger auf den Wert konvertiert. Der Wert an sich wird weder kopiert noch in irgendeiner Weise verändert. Lediglich der Datentyp der Variablen, die den Zeiger enthält, kann sich ändern. Im folgenden Beispiel wird der Datentyp von der abgeleiteten Klasse in die Basisklasse konvertiert. Das Objekt, auf das nun beide Variablen zeigen, wird dabei allerdings nicht verändert.
' Assume class cSquare inherits from class cShape.
Dim shape As cShape
Dim square As cSquare = New cSquare
' The following statement performs a widening
' conversion from a derived class to its base class.
shape = square
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)
Konvertierungen zwischen Zeichenfolgen und anderen Typen (Visual Basic)
Arraykonvertierungen (Visual Basic)