Conversions implicites et explicites (Visual Basic)
Une conversion implicite ne nécessite aucune syntaxe particulière dans le code source. Dans l’exemple suivant, Visual Basic convertit implicitement la valeur de k
en une valeur à virgule flottante simple précision avant de l’attribuer à 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
Une conversion explicite utilise un mot clé de conversion de type. Visual Basic fournit plusieurs mots clés de ce type, qui forcent une expression entre parenthèses au type de données souhaité. Ces mots clés agissent comme des fonctions, mais le compilateur génère le code en ligne, de sorte que l’exécution est légèrement plus rapide qu’avec un appel de fonction.
Dans l’extension suivante de l’exemple précédent, le mot clé CInt
convertit à nouveau la valeur de q
en entier avant de l’affecter à 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).
Mots clés de conversion
La table suivante présente les mots clés de conversion disponibles.
Mot clé de conversion de type | Convertit une expression en type de données | Types de données d’expression autorisés à être convertis |
---|---|---|
CBool |
Booléen (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), String , Object |
CByte |
Octet (type de données) | N’importe quel type numérique (y compris SByte et les types et énumérés), Boolean , String , Object |
CChar |
Caractères (type de données) | String , Object |
CDate |
Date (type de données) | String , Object |
CDbl |
Double (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , String , Object |
CDec |
Décimal (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , String , Object |
CInt |
Integer (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , String , Object |
CLng |
Long (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , String , Object |
CObj |
Object Data Type | Tout type |
CSByte |
SByte (type de données) | N’importe quel type numérique (y compris Byte et les types et énumérés), Boolean , String , Object |
CShort |
Court (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , String , Object |
CSng |
Single (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , String , Object |
CStr |
String (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , Char , tableau Char , Date , Object |
CType |
Type spécifié à la suite de la virgule (, ) |
Lors de la conversion en type de données élémentaire (y compris un tableau d’un type élémentaire), les mêmes types que ceux autorisés pour le mot clé de conversion correspondant Lors de la conversion en type de données composite, les interfaces qu’il implémente et les classes dont il hérite Lors de la conversion en classe ou structure sur laquelle vous avez surchargé CType , cette classe ou cette structure |
CUInt |
UInteger (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , String , Object |
CULng |
ULong (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , String , Object |
CUShort |
UShort (type de données) | N’importe quel type numérique (y compris Byte , SByte et les types énumérés), Boolean , String , Object |
La fonction CType
La fonction CType fonctionne sur deux arguments. Le premier est l’expression à convertir et le second est le type de données ou la classe d’objets de destination. Notez que le premier argument doit être une expression, pas un type.
CType
est une fonction incluse, ce qui signifie que le code compilé effectue la conversion, souvent sans générer d’appel de fonction. Les performances en sont alors améliorées.
Pour obtenir une comparaison de CType
avec les autres mots clés de conversion de type, consultez Opérateur DirectCast et Opérateur TryCast.
Types élémentaires
L'exemple suivant montre l'utilisation de CType
.
k = CType(q, Integer)
' The following statement coerces w to the specific object class Label.
f = CType(w, Label)
Types composites
Vous pouvez utiliser CType
pour convertir des valeurs en types de données composites ainsi qu’en types élémentaires. Vous pouvez également l’utiliser pour forcer une classe d’objet au type de l’une de ses interfaces, comme dans l’exemple suivant.
' 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)
Types de tableaux
CType
peut également convertir des types de données de tableau, comme dans l’exemple suivant.
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
Pour plus d’informations et pour obtenir un exemple, consultez Conversion de tableaux.
Types définissant la fonction CType
Vous pouvez définir CType
sur une classe ou une structure que vous avez définie. Cela vous permet de convertir des valeurs vers et à partir du type de votre classe ou de votre structure. Pour obtenir plus d’informations et consulter un exemple, reportez-vous à Guide pratique : définir un opérateur de conversion.
Notes
Les valeurs utilisées avec un mot clé de conversion doivent être valides pour le type de données de destination, sinon une erreur se produit. Par exemple, si vous tentez de convertir un Long
en Integer
, la valeur de Long
doit se trouver dans la plage valide pour le type de données Integer
.
Attention
Spécifier à CType
de convertir un type de classe en un autre échoue au moment du temps d’exécution si le type de source ne dérive pas du type de destination. Un tel échec lève une exception InvalidCastException.
Toutefois, si l’un des types est une structure ou une classe que vous avez définie, et si vous avez défini CType
sur cette structure ou classe, une conversion peut réussir si elle répond aux exigences de votre CType
. Consultez Guide pratique : définir un opérateur de conversion.
L’exécution d’une conversion explicite est également appelée cast d’une expression dans un type de données spécifique ou une classe d’objet donnée.