Freigeben über


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 Typkonvertierungsstichwort. 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 Erweiterung des vorhergehenden 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).

Schlüsselwörter für Konversionen

In der folgenden Tabelle sind die verfügbaren Konvertierungstichwörter 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 Boolescher 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, StringObject
CChar Char-Datentyp String, Object
CDate Datumsdatentyp String, Object
CDbl Double-Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByte, und Aufzählungstypen), Boolean, String, Object
CDec Dezimaler 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 Objektdatentyp Beliebiger Typ
CSByte SByte-Datentyp Beliebiger numerischer Typ (einschließlich Byte und Aufzählungstypen), Boolean, StringObject
CShort Kurzer Datentyp Beliebiger numerischer Typ (einschließlich Byte, SByte, und Aufzählungstypen), Boolean, String, Object
CSng Einzelner 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 Konvertierungsstichwort zulässig.

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

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. Der erste ist der zu konvertierende Ausdruck, und der 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 macht die Konvertierung, häufig ohne Funktionsaufruf zu generieren. Dadurch wird die Leistung verbessert.

Vergleichen Sie CType mit den anderen Typkonvertierungskeywords unter DirectCast-Operator und TryCast-Operator.

Elementare Typen

Im folgenden Beispiel wird die Verwendung von CTypeveranschaulicht.

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 in einer von Ihnen definierte Klasse oder Struktur festlegen. 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 How to: Define a Conversion Operator.

Hinweis

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

Vorsicht

Die Angabe CType zur Konvertierung von einem Klassentyp in einen anderen schlägt zur Laufzeit fehl, 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 diese Struktur oder Klasse definiert CType haben, kann eine Konvertierung erfolgreich sein, wenn sie die Anforderungen Ihrer CTypeKlasse erfüllt. Siehe Vorgehensweise: 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