Partager via


Conversions implicites et explicites (Visual Basic)

Une conversion implicite ne nécessite aucune syntaxe spéciale dans le code source. Dans l’exemple suivant, Visual Basic convertit implicitement la valeur d’une k valeur à virgule flottante simple précision avant de l’affecter à 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, ce qui force 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 inline. L’exécution est donc légèrement plus rapide qu’avec un appel de fonction.

Dans l’extension suivante de l’exemple précédent, le CInt mot clé convertit la valeur de q retour 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

Le tableau suivant 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 autorisés d’expression à convertir
CBool Type de données booléen Tout type numérique (y comprisByte, et SBytetypes énumérés), StringObject
CByte Type de données d’octet Tout type numérique (y compris SByte et énuméré), Boolean, , StringObject
CChar Type de données Char String, Object
CDate Date (type de données) String, Object
CDbl Type de données double Tout type numérique (y compris Byte, et SBytetypes énumérés), Boolean, String, Object
CDec Type de données décimal Tout type numérique (y compris Byte, et SBytetypes énumérés), Boolean, String, Object
CInt Type de données Integer Tout type numérique (y compris Byte, et SBytetypes énumérés), Boolean, String, Object
CLng Type de données long Tout type numérique (y compris Byte, et SBytetypes énumérés), Boolean, String, Object
CObj Type de données de l'objet Tout type
CSByte Type de données SByte Tout type numérique (y compris Byte et énuméré), Boolean, , StringObject
CShort Type de données court Tout type numérique (y compris Byte, et SBytetypes énumérés), Boolean, String, Object
CSng Type de données unique Tout type numérique (y compris Byte, et SBytetypes énumérés), Boolean, String, Object
CStr Type de données de chaîne Tout type numérique (y compris, et SBytetypes énumérés), Boolean, Char, Char tableau, Date,ByteObject
CType Type spécifié après 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 structure
CUInt Type de données UInteger Tout type numérique (y compris Byte, et SBytetypes énumérés), Boolean, String, Object
CULng Type de données ULong Tout type numérique (y compris Byte, et SBytetypes énumérés), Boolean, String, Object
CUShort Type de données UShort Tout type numérique (y compris Byte, et SBytetypes énumérés), Boolean, String, Object

Fonction CType

La fonction CType fonctionne sur deux arguments. La première est l’expression à convertir, et la seconde est le type de données de destination ou la classe d’objet. Notez que le premier argument doit être une expression, et non un type.

CType est une fonction inline, 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 des autres mots clés de conversion de CType type, consultez Opérateur DirectCast et Opérateur TryCast.

Types élémentaires

L’exemple suivant illustre 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 un exemple, consultez Conversions de tableaux.

Types définissant 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 structure. Pour plus d’informations et un exemple, consultez Guide pratique pour définir un opérateur de conversion.

Remarque

Les valeurs utilisées avec un mot clé de conversion doivent être valides pour le type de données de destination, ou une erreur se produit. Par exemple, si vous tentez de convertir un Long en un Integer, la valeur du Long fichier doit se trouver dans la plage valide pour le Integer type de données.

Avertissement

La spécification CType de conversion d’un type de classe en un autre échoue au moment de l’exécution si le type source ne dérive pas du type de destination. Un tel échec lève une InvalidCastException exception.

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. Découvrez comment : définir un opérateur de conversion.

L’exécution d’une conversion explicite est également appelée conversion d’une expression en un type de données ou une classe d’objet donné.

Voir aussi