Implizite und explizite Konvertierungen (Visual Basic)
Für implizite Konvertierungen ist keine spezielle Syntax im Quellcode erforderlich.Im folgenden Beispiel konvertiert Visual Basic den Wert von k implizit in einen Gleitkommawert einfacher Genauigkeit und weist den Wert anschließend q zu.
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
Bei expliziten Konvertierungen wird ein Schlüsselwort zur Typkonvertierung verwendet.Visual Basic stellt mehrere solcher Schlüsselwörter bereit, mit denen ein in runden Klammern stehender Ausdruck in den gewünschten Datentyp konvertiert wird.Diese Schlüsselwörter verhalten sich wie Funktionen, aber der Compiler generiert den Code inline, sodass die Ausführung etwas schneller als bei einem Funktionsaufruf erfolgt.
In der folgenden Erweiterung des oben stehenden Beispiels konvertiert das CInt-Schlüsselwort den Wert von q vor der Zuweisung zu k wieder in eine ganze Zahl.
' 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 Konvertierungsschlüsselwörter zusammengefasst.
Typkonvertierungsschlüsselwort |
Konvertierung eines Ausdrucks in Datentyp |
Zulässige Datentypen für zu konvertierenden Ausdruck |
CBool |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), String, Object |
|
CByte |
Ein beliebiger numerischer Typ (einschließlich SByte und Enumerationstypen), Boolean, String, Object |
|
CChar |
String, Object |
|
CDate |
String, Object |
|
CDbl |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object |
|
CDec |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object |
|
CInt |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object |
|
CLng |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object |
|
CObj |
Beliebiger Typ |
|
CSByte |
Ein beliebiger numerischer Typ (einschließlich Byte und Enumerationstypen), Boolean, String, Object |
|
CShort |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object |
|
CSng |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object |
|
CStr |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, Char, Char-Array, Date, Object |
|
CType |
Nach dem Komma (,) angegebener Typ |
Bei der Konvertierung in einen elementaren Datentyp (einschließlich eines Arrays eines elementaren Typs) dieselben Typen, die für das entsprechende Konvertierungsschlüsselwort zulässig sind Bei der Konvertierung in einen zusammengesetzten Datentyp die implementierten Schnittstellen und die Klassen, von denen geerbt wird Bei der Konvertierung in eine Klasse oder Struktur, auf die Sie CType überladen haben, die betreffende Klasse oder Struktur |
CUInt |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object |
|
CULng |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object |
|
CUShort |
Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object |
Die CType-Funktion
Die CType-Funktion (Visual Basic) wird auf zwei Argumente angewendet.Das erste Argument ist der zu konvertierende Ausdruck, das zweite der Zieldatentyp oder die Objektklasse.Das erste Argument muss ein Ausdruck sein, kein Typ.
CType ist eine Inlinefunktion. Das heißt, dass der kompilierte Code die Konvertierung ausführt, in vielen Fällen auch ohne Funktionsaufruf.Dies führt zu einer Leistungssteigerung.
Einen Vergleich von CType mit den anderen Typkonvertierungsschlüsselwörtern finden Sie unter DirectCast-Operator (Visual Basic) und 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
Mithilfe von CType können Sie Werte sowohl in zusammengesetzte Datentypen als auch in elementare Typen konvertieren.Darüber hinaus können Sie damit eine Objektklasse in den Typ einer der dazugehörigen Schnittstellen konvertieren, wie im folgenden Beispiel dargestellt.
' 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
Außerdem können mit CType Arraytypen konvertiert werden, wie im folgenden Beispiel dargestellt.
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 (Visual Basic).
Typen, die CType definieren
Sie können CType auf einer Klasse oder einer Struktur definieren, die Sie definiert haben.Damit können Sie Werte in den Typ der Klasse oder Struktur konvertieren bzw. aus diesem Typ konvertieren.Weitere Informationen und ein Beispiel finden Sie unter Gewusst wie: Definieren eines Konvertierungsoperators (Visual Basic).
Hinweis |
---|
Die mit einem Konvertierungsschlüsselwort verwendeten Werte müssen für den Zieldatentyp gültig sein. Andernfalls tritt ein Fehler auf.Wenn Sie beispielsweise versuchen, Long in Integer zu konvertieren, muss der Wert von Long innerhalb des gültigen Bereichs für den Integer-Datentyp liegen. |
Vorsicht |
---|
Wenn der Ausgangstyp nicht aus dem Zieltyp abgeleitet wird, tritt bei der Verwendung von CType zur Konvertierung von einem Klassentyp in einen anderen ein Fehler auf.Durch einen solchen Fehler wird eine InvalidCastException-Ausnahme ausgelöst. |
Wenn es sich bei einem dieser Typen jedoch um eine von Ihnen definierte Struktur oder Klasse handelt und Sie CType in der betreffenden Struktur oder Klasse definiert haben, kann eine Konvertierung durchgeführt werden, wenn sie den Anforderungen von CType entspricht.Weitere Informationen finden Sie unter Gewusst wie: Definieren eines Konvertierungsoperators (Visual Basic).
Explizite Konvertierungen werden auch als Umwandlung eines Ausdrucks in einen gegebenen Datentyp oder eine Objektklasse bezeichnet.
Siehe auch
Aufgaben
Gewusst wie: Konvertieren eines Objekts in einen anderen Typ in Visual Basic
Problembehandlung bei Datentypen (Visual Basic)
Referenz
Datentyp: Zusammenfassung (Visual Basic)
Funktionen für die Typkonvertierung (Visual Basic)
Konzepte
Konvertierungen zwischen Zeichenfolgen und anderen Typen (Visual Basic)