Delen via


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, SByteen opgesomde typen), StringObject
CByte Bytegegevenstype Elk numeriek type (inclusief SByte en opgesomde typen), Boolean, , StringObject
CChar Gegevenstype teken String, Object
CDate Datumgegevenstype String, Object
CDbl Dubbel gegevenstype Elk numeriek type (inclusief Byte, SByteen opgesomde typen), Boolean, , StringObject
CDec Decimaal gegevenstype Elk numeriek type (inclusief Byte, SByteen opgesomde typen), Boolean, , StringObject
CInt Gegevenstype geheel getal Elk numeriek type (inclusief Byte, SByteen opgesomde typen), Boolean, , StringObject
CLng Lang gegevenstype Elk numeriek type (inclusief Byte, SByteen opgesomde typen), Boolean, , StringObject
CObj Objectgegevenstype Elk type
CSByte SByte-gegevenstype Elk numeriek type (inclusief Byte en opgesomde typen), Boolean, , StringObject
CShort Kort gegevenstype Elk numeriek type (inclusief Byte, SByteen opgesomde typen), Boolean, , StringObject
CSng Eén gegevenstype Elk numeriek type (inclusief Byte, SByteen opgesomde typen), Boolean, , StringObject
CStr Gegevenstype tekenreeks Elk numeriek type (inclusiefByte, en geïnventariseerd type), Boolean, , CharChar matrix, DateSByte,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 CTypebent, die klasse of structuur
CUInt UInteger-gegevenstype Elk numeriek type (inclusief Byte, SByteen opgesomde typen), Boolean, , StringObject
CULng ULong-gegevenstype Elk numeriek type (inclusief Byte, SByteen opgesomde typen), Boolean, , StringObject
CUShort UShort-gegevenstype Elk numeriek type (inclusief Byte, SByteen opgesomde typen), Boolean, , StringObject

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.

Zie ook