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 k
in 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 , SByte und 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 , SByte und Aufzählungstypen), Boolean , String , Object |
CDec |
Decimal-Datentyp | Beliebiger numerischer Typ (einschließlich Byte , SByte und Aufzählungstypen), Boolean , String , Object |
CInt |
Integer-Datentyp | Beliebiger numerischer Typ (einschließlich Byte , SByte und Aufzählungstypen), Boolean , String , Object |
CLng |
Long-Datentyp | Beliebiger numerischer Typ (einschließlich Byte , SByte und 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 , SByte und Aufzählungstypen), Boolean , String , Object |
CSng |
Single-Datentyp | Beliebiger numerischer Typ (einschließlich Byte , SByte und 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 , SByte und Aufzählungstypen), Boolean , String , Object |
CULng |
ULong-Datentyp | Beliebiger numerischer Typ (einschließlich Byte , SByte und Aufzählungstypen), Boolean , String , Object |
CUShort |
UShort-Datentyp | Beliebiger numerischer Typ (einschließlich Byte , SByte und 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.