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

Boolean-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), String, Object

CByte

Byte-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich SByte und Enumerationstypen), Boolean, String, Object

CChar

Char-Datentyp (Visual Basic)

String, Object

CDate

Date-Datentyp (Visual Basic)

String, Object

CDbl

Double-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object

CDec

Decimal-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object

CInt

Integer-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object

CLng

Long-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object

CObj

Object-Datentyp

Beliebiger Typ

CSByte

SByte-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich Byte und Enumerationstypen), Boolean, String, Object

CShort

Short-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object

CSng

Single-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object

CStr

String-Datentyp (Visual Basic)

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

UInteger-Datentyp

Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object

CULng

ULong-Datentyp (Visual Basic)

Ein beliebiger numerischer Typ (einschließlich Byte, SByte und Enumerationstypen), Boolean, String, Object

CUShort

UShort-Datentyp (Visual Basic)

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

Tipp

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.

Warnung

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

Wertänderungen durch Konvertierungen (Visual Basic)

Konvertierungen zwischen Zeichenfolgen und anderen Typen (Visual Basic)

Typenloses Programmieren in Visual Basic

Weitere Ressourcen

Typkonvertierung in Visual Basic

Strukturen (Visual Basic)