Impliciete en expliciete conversies (Visual Basic)
Een impliciete conversie vereist geen speciale syntaxis in de broncode. In het volgende voorbeeld converteert Visual Basic impliciet de waarde van k
naar een drijvendekommawaarde met één precisie voordat u deze toewijst aan 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
Voor een expliciete conversie wordt een trefwoord voor typeconversie gebruikt. Visual Basic biedt verschillende dergelijke trefwoorden, waardoor een expressie tussen haakjes wordt gekoppeld aan het gewenste gegevenstype. Deze trefwoorden fungeren als functies, maar de compiler genereert de code inline, dus de uitvoering verloopt iets sneller dan met een functie-aanroep.
In de volgende extensie van het vorige voorbeeld converteert het CInt
trefwoord de waarde van q
terug naar een geheel getal voordat het wordt toegewezen aan 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).
Conversietrefwoorden
In de volgende tabel ziet u de beschikbare conversietrefwoorden.
Trefwoord voor typeconversie | Converteert een expressie naar het gegevenstype | Toegestane gegevenstypen van expressies worden geconverteerd |
---|---|---|
CBool |
Booleaanse gegevenstype | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), String Object |
CByte |
Bytegegevenstype | Elk numeriek type (inclusief SByte en opgesomde typen), Boolean , , String Object |
CChar |
Gegevenstype teken | String , Object |
CDate |
Datumgegevenstype | String , Object |
CDbl |
Dubbel gegevenstype | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), Boolean , , String Object |
CDec |
Decimaal gegevenstype | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), Boolean , , String Object |
CInt |
Gegevenstype geheel getal | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), Boolean , , String Object |
CLng |
Lang gegevenstype | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), Boolean , , String Object |
CObj |
Objectgegevenstype | Elk type |
CSByte |
SByte-gegevenstype | Elk numeriek type (inclusief Byte en opgesomde typen), Boolean , , String Object |
CShort |
Kort gegevenstype | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), Boolean , , String Object |
CSng |
Eén gegevenstype | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), Boolean , , String Object |
CStr |
Gegevenstype tekenreeks | Elk numeriek type (inclusiefByte , en geïnventariseerd type), Boolean , , Char Char matrix, Date SByte ,Object |
CType |
Type dat is opgegeven na de komma (, ) |
Bij het converteren naar een elementair gegevenstype (inclusief een matrix van een basistype), dezelfde typen als die zijn toegestaan voor het bijbehorende trefwoord voor conversie Bij het converteren naar een samengesteld gegevenstype worden de interfaces geïmplementeerd en de klassen waaruit het gegevenstype over neemt Bij het converteren naar een klasse of structuur waarop u overbelast CType bent, die klasse of structuur |
CUInt |
UInteger-gegevenstype | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), Boolean , , String Object |
CULng |
ULong-gegevenstype | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), Boolean , , String Object |
CUShort |
UShort-gegevenstype | Elk numeriek type (inclusief Byte , SByte en opgesomde typen), Boolean , , String Object |
De functie CType
De CType-functie werkt op twee argumenten. De eerste is de expressie die moet worden geconverteerd en de tweede is het doelgegevenstype of de objectklasse. Houd er rekening mee dat het eerste argument een expressie moet zijn, niet een type.
CType
is een inlinefunctie, wat betekent dat de gecompileerde code de conversie maakt, vaak zonder een functieaanroep te genereren. Dit helpt de prestaties te verbeteren.
Zie DirectCast Operator en TryCast Operator voor een vergelijking van CType
de andere typeconversietrefwoorden.
Elementaire typen
In het volgende voorbeeld ziet u het gebruik van CType
.
k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)
Samengestelde typen
U kunt CType
waarden converteren naar samengestelde gegevenstypen en naar elementaire typen. U kunt deze ook gebruiken om een objectklasse te dwingen tot het type van een van de bijbehorende interfaces, zoals in het volgende voorbeeld.
' 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)
Matrixtypen
CType
kan ook matrixgegevenstypen converteren, zoals in het volgende voorbeeld.
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
Zie Matrixconversies voor meer informatie en een voorbeeld.
Typen die CType definiëren
U kunt definiëren CType
voor een klasse of structuur die u hebt gedefinieerd. Hiermee kunt u waarden converteren naar en van het type klasse of structuur. Zie Een conversieoperator definiëren voor meer informatie en een voorbeeld.
Notitie
Waarden die worden gebruikt met een conversiewoord moeten geldig zijn voor het doelgegevenstype of er treedt een fout op. Als u bijvoorbeeld probeert een Long
waarde te converteren naar een Integer
, moet de waarde van de Long
waarde binnen het geldige bereik voor het Integer
gegevenstype vallen.
Let op
CType
Opgeven dat het converteren van het ene klassetype naar het andere mislukt tijdens de uitvoering als het brontype niet is afgeleid van het doeltype. Een dergelijke fout genereert een InvalidCastException uitzondering.
Als een van de typen echter een structuur of klasse is die u hebt gedefinieerd en als u hebt gedefinieerd CType
voor die structuur of klasse, kan een conversie slagen als deze voldoet aan de vereisten van uw CType
. Zie Procedure: Een conversieoperator definiëren.
Het uitvoeren van een expliciete conversie wordt ook wel een expressie naar een bepaald gegevenstype of objectklasse gecast.