Implizite und explizite Konvertierungen (Visual Basic)

Eine implizite Konvertierung erfordert keine spezielle Syntax im Quellcode. Im folgenden Beispiel konvertiert Visual Basic implizit den Wert von kin einen Gleitkommawert mit einfacher Genauigkeit, bevor er q zugewiesen wird.

Dim k As Integer
Dim q As Double
' Integer widens to Double, so you can do this with Option Strict On.
k = 432
q = k

Eine explizite Konvertierung verwendet ein Schlüsselwort für die Typkonvertierung. Visual Basic stellt mehrere dieser Schlüsselwörter bereit, die einen Ausdruck in Klammern zum gewünschten Datentyp zusammenfassen. Diese Schlüsselwörter funktionieren wie Funktionen, aber der Compiler generiert den Code inline, sodass die Ausführung etwas schneller ist als bei einem Funktionsaufruf.

In der folgenden Erweiterung des vorherigen Beispiels konvertiert das Schlüsselwort CInt den Wert von q zurück in eine ganze Zahl, bevor er k zugewiesen wird.

' q had been assigned the value 432 from k.
q = Math.Sqrt(q)
k = CInt(q)
' k now has the value 21 (rounded square root of 432).

Konvertierungsschlüsselwörter

In der folgenden Tabelle sind die verfügbaren Schlüsselwörter für die Konvertierung aufgeführt.

Schlüsselwort für die Typkonvertierung Konvertiert einen Ausdruck in den Datentyp Zulässige Datentypen von Ausdrücken, die konvertiert werden sollen
CBool Boolean-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), String, Object
CByte Byte-Datentyp Beliebiger numerischer Typ (einschließlich SByte und Aufzählungstypen), Boolean, String, Object
CChar Char-Datentyp String, Object
CDate Date-Datentyp String, Object
CDbl Double-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), Boolean, String, Object
CDec Decimal-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), Boolean, String, Object
CInt Integer-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), Boolean, String, Object
CLng Long-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), Boolean, String, Object
CObj Object Data Type Beliebiger Typ
CSByte SByte-Datentyp Beliebiger numerischer Typ (einschließlich Byte und Aufzählungstypen), Boolean, String, Object
CShort Short-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), Boolean, String, Object
CSng Single-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), Boolean, String, Object
CStr String-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, Char, Char-Array, Date, Object
CType Typ, der nach dem Komma (,) angegeben ist Beim Konvertieren in einen elementaren Datentyp (einschließlich eines Arrays eines elementaren Typs) sind dieselben Typen wie für das entsprechende Konvertierungsschlüsselwort zulässig

Beim Konvertieren in einen zusammengesetzten Datentyp werden die von ihm implementierten Schnittstellen und die Klassen, von denen er erbt, implementiert.

Beim Konvertieren in eine Klasse oder Struktur, für die Sie CType überladen haben, gilt diese Klasse oder Struktur.
CUInt UInteger-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), Boolean, String, Object
CULng ULong-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), Boolean, String, Object
CUShort UShort-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByteund Aufzählungstypen), Boolean, String, Object

Die CType-Funktion

Die CType-Funktion arbeitet mit zwei Argumenten. Das erste ist der zu konvertierende Ausdruck, und das zweite ist der Zieldatentyp oder die Objektklasse. Beachten Sie, dass das erste Argument ein Ausdruck und kein Typ sein muss.

CType ist eine Inlinefunktion, d. h. der kompilierte Code erstellt die Konvertierung (häufig ohne einen Funktionsaufruf zu generieren). Dadurch wird die Leistung verbessert.

Einen Vergleich von CType mit den anderen Schlüsselwörtern für die Typkonvertierung finden Sie unter DirectCast-Operator (Visual Basic) sowie unter TryCast-Operator (Visual Basic).

Elementare Typen

Das folgende Beispiel veranschaulicht die Verwendung von CType.

k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)

Zusammengesetzte Typen

Sie können die CType-Funktion verwenden, um Werte sowohl in zusammengesetzte Datentypen als auch in Elementartypen zu konvertieren. Sie können sie auch verwenden, um eine Objektklasse in den Typ einer seiner Schnittstellen zu überstellen, wie im folgenden Beispiel gezeigt.

' Assume class cZone implements interface iZone.
Dim h As Object
' The first argument to CType must be an expression, not a type.
Dim cZ As cZone
' The following statement coerces a cZone object to its interface iZone.
h = CType(cZ, iZone)

Arraytypen

CType kann auch Arraydatentypen konvertieren, wie im folgenden Beispiel gezeigt.

Dim v() As classV
Dim obArray() As Object
' Assume some object array has been assigned to obArray.
' Check for run-time type compatibility.
If TypeOf obArray Is classV()
    ' obArray can be converted to classV.
    v = CType(obArray, classV())
End If

Weitere Informationen und ein Beispiel finden Sie unter Arraykonvertierungen.

Typen, die CType definieren

Sie können CType für eine von Ihnen definierte Klasse oder Struktur definieren. Auf diese Weise können Sie Werte in und aus dem Typ Ihrer Klasse oder Struktur konvertieren. Weitere Informationen und ein Beispiel finden Sie unter Definieren eines Konvertierungsoperators (Visual Basic).

Hinweis

Werte, die mit einem Konvertierungsschlüsselwort verwendet werden, müssen für den Zieldatentyp gültig sein, andernfalls tritt ein Fehler auf. Wenn Sie z. B. versuchen, einen Long in Integer zu konvertieren, muss der Wert von Long innerhalb des gültigen Bereichs für den Integer-Datentyp liegen.

Achtung

Wenn Sie CType angeben, um einen Klassentyp in einen anderen zu konvertieren, wird zur Laufzeit ein Fehler ausgegeben, wenn der Quelltyp nicht vom Zieltyp abgeleitet wird. Ein solcher Fehler löst eine InvalidCastException-Ausnahme aus.

Wenn es sich bei einem der Typen jedoch um eine Struktur oder Klasse handelt, die Sie definiert haben, und wenn Sie CType für diese Struktur oder Klasse definiert haben, kann eine Konvertierung erfolgreich sein, wenn sie die Anforderungen Ihrer CType erfüllt. Weitere Informationen finden Sie unter Definieren eines Konvertierungsoperators.

Das Ausführen einer expliziten Konvertierung wird auch als Umwandlung eines Ausdrucks in einen bestimmten Datentyp oder eine Objektklasse bezeichnet.

Siehe auch