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 , SByte och uppräknade typer), String , Object |
CByte |
Bytedatatyp | Alla numeriska typer (inklusive SByte och uppräknade typer), Boolean , , String Object |
CChar |
Teckendatatyp | String , Object |
CDate |
Datumdatatyp | String , Object |
CDbl |
Dubbel datatyp | Alla numeriska typer (inklusive Byte , SByte och uppräknade typer), Boolean , , String , Object |
CDec |
Decimaldatatyp | Alla numeriska typer (inklusive Byte , SByte och uppräknade typer), Boolean , , String , Object |
CInt |
Heltalsdatatyp | Alla numeriska typer (inklusive Byte , SByte och uppräknade typer), Boolean , , String , Object |
CLng |
Lång datatyp | Alla numeriska typer (inklusive Byte , SByte och 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 , , String Object |
CShort |
Kort datatyp | Alla numeriska typer (inklusive Byte , SByte och uppräknade typer), Boolean , , String , Object |
CSng |
Enskild datatyp | Alla numeriska typer (inklusive Byte , SByte och uppräknade typer), Boolean , , String , Object |
CStr |
Strängdatatyp | Alla numeriska typer (inklusive Byte , SByte och uppräknade typer), Boolean , , Char matris 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 , SByte och uppräknade typer), Boolean , , String , Object |
CULng |
ULong-datatyp | Alla numeriska typer (inklusive Byte , SByte och uppräknade typer), Boolean , , String , Object |
CUShort |
UShort-datatyp | Alla numeriska typer (inklusive Byte , SByte och 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 Integer
vä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.