Share via


Implicita och explicita konverteringar (Visual Basic)

En implicit konvertering kräver ingen särskild syntax i källkoden. I följande exempel konverterar Visual Basic implicit värdet k för till ett flyttal med enkel precision innan du tilldelar det till q.

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

En explicit konvertering använder ett nyckelord för typkonvertering. Visual Basic innehåller flera sådana nyckelord som tvingar ett uttryck inom parenteser till önskad datatyp. Dessa nyckelord fungerar som funktioner, men kompilatorn genererar koden infogad, så körningen går något snabbare än med ett funktionsanrop.

I följande tillägg i föregående exempel konverterar nyckelordet CInt värdet q för tillbaka till ett heltal innan det tilldelas till k.

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

Konverteringsnyckelord

I följande tabell visas de tillgängliga konverteringsnyckelorden.

Nyckelord för typkonvertering Konverterar ett uttryck till datatyp Tillåtna datatyper av uttryck som ska konverteras
CBool Boolesk datatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), String, Object
CByte Bytedatatyp Alla numeriska typer (inklusive SByte och uppräknade typer), Boolean, , StringObject
CChar Teckendatatyp String, Object
CDate Datumdatatyp String, Object
CDbl Dubbel datatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , String, Object
CDec Decimaldatatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , String, Object
CInt Heltalsdatatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , String, Object
CLng Lång datatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , String, Object
CObj Objektdatatyp Alla typer
CSByte Datatyp för SByte Alla numeriska typer (inklusive Byte och uppräknade typer), Boolean, , StringObject
CShort Kort datatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , String, Object
CSng Enskild datatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , String, Object
CStr Strängdatatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , Charmatris Char , Date, Object
CType Typ som anges efter kommatecknet (,) När du konverterar till en elementär datatyp (inklusive en matris av elementär typ), samma typer som tillåts för motsvarande konverteringsnyckelord

När du konverterar till en sammansatt datatyp implementerar de gränssnitt som den implementerar och de klasser som den ärver från

När du konverterar till en klass eller struktur där du har överbelastat CType, den klassen eller strukturen
CUInt UInteger-datatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , String, Object
CULng ULong-datatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , String, Object
CUShort UShort-datatyp Alla numeriska typer (inklusive Byte, SByteoch uppräknade typer), Boolean, , String, Object

CType-funktionen

CType-funktionen fungerar på två argument. Det första är uttrycket som ska konverteras och det andra är måldatatypen eller objektklassen. Observera att det första argumentet måste vara ett uttryck, inte en typ.

CType är en infogad funktion, vilket innebär att den kompilerade koden gör konverteringen, ofta utan att generera ett funktionsanrop. Detta förbättrar prestandan.

En jämförelse av CType med andra typkonverteringsnyckelord finns i DirectCast-operatorn och TryCast-operatorn.

Elementära typer

I följande exempel visas användningen av CType.

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

Sammansatta typer

Du kan använda CType för att konvertera värden till sammansatta datatyper samt till elementära typer. Du kan också använda den för att tvinga en objektklass till typen av ett av dess gränssnitt, som i följande exempel.

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

Matristyper

CType kan också konvertera matrisdatatyper, som i följande exempel.

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

Mer information och ett exempel finns i Matriskonverteringar.

Typer som definierar CType

Du kan definiera CType på en klass eller struktur som du har definierat. På så sätt kan du konvertera värden till och från typen av klass eller struktur. Mer information och ett exempel finns i Så här definierar du en konverteringsoperator.

Kommentar

Värden som används med ett konverteringsnyckelord måste vara giltiga för måldatatypen, eller så uppstår ett fel. Om du till exempel försöker konvertera en Long till måste Integervärdet Long för vara inom det giltiga intervallet för Integer datatypen.

Varning

Det CType går inte att ange att konvertera från en klasstyp till en annan vid körning om källtypen inte härleds från måltypen. Ett sådant fel utlöser ett InvalidCastException undantag.

Men om en av typerna är en struktur eller klass som du har definierat, och om du har definierat CType för den strukturen eller klassen, kan en konvertering lyckas om den uppfyller kraven för din CType. Se Så här: Definiera en konverteringsoperator.

Att utföra en explicit konvertering kallas även för att omvandla ett uttryck till en viss datatyp eller objektklass.

Se även