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

SByte, Short, Integer, Long, Decimal, Single, Double

Byte

Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Short

Short, Integer, Long, Decimal, Single, Double

UShort

UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double

Integer

Integer, Long, Decimal, Single, Double2

UInteger

UInteger, Long, ULong, Decimal, Single, Double2

Long

Long, Decimal, Single, Double2

ULong

ULong, Decimal, Single, Double2

Decimal

Decimal, Single, Double2

Single

Single, Double

Double

Double

Beliebiger aufgelisteter Typ (Enum)

Der zugrunde liegende ganzzahliger Typ und jeder Typ, in den der zugrunde liegende Typ erweitert wird.

Char

Char, String

Char-Array

Char-Array, String

Beliebiger Typ

Objekt

Beliebiger abgeleiteter Typ

Beliebiger Basistyp, von dem er abgeleitet 3ist.

Beliebiger Typ

Beliebige Schnittstelle, die sie implementiert.

Nothing

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.

HinweisHinweis

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).

k1e94s7e.collapse_all(de-de,VS.110).gifVerwendungsmö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

Datentypen in Visual Basic

Implizite und explizite Konvertierungen (Visual Basic)

Konvertierungen zwischen Zeichenfolgen und anderen Typen (Visual Basic)

Arraykonvertierungen (Visual Basic)

Weitere Ressourcen

Typkonvertierung in Visual Basic