Conversions implicites et explicites

Mise à jour : novembre 2007

Une conversion implicite ne requiert pas de 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'assigner à 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é à cet effet, 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, si bien que l'exécution est légèrement plus rapide qu'avec un appel de fonction.

Dans l'exemple ci-dessous qui fait suite à l'exemple précédent, le mot clé CInt reconvertit la valeur de q en un entier avant de l'assigner à 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 répertorie les mots clés de conversion disponibles.

Mot clé de conversion de type

Convertit une expression vers le type de données

Types de données autorisés d'expression à convertir

CBool

Boolean, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), String, Object

CByte

Byte, type de données (Visual Basic)

Tout type numérique (y compris SByte et les types énumérés), Boolean, String, Object

CChar

Char, type de données (Visual Basic)

String, Object

CDate

Type de données date (Visual Basic)

String, Object

CDbl

Double, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, String, Object

CDec

Decimal, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, String, Object

CInt

Integer, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, String, Object

CLng

Long, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, String, Object

CObj

Object, type de données

Tout type

CSByte

SByte, type de données (Visual Basic)

Tout type numérique (y compris Byte et les types énumérés), Boolean, String, Object

CShort

Short, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, String, Object

CSng

Single, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, String, Object

CStr

String, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, tableau Char, Char, Date, Object

CType

Type spécifié après la virgule (,)

Lors d'une conversion vers un type de données élémentaire (y compris un tableau d'un type élémentaire), les mêmes types que ceux qui sont autorisés pour le mot clé de conversion correspondant

Lors d'une conversion vers un type de données composite, les interfaces qu'il implémente et les classes à partir desquelles il hérite

Lors de la conversion vers une classe ou une structure sur laquelle vous avez surchargé CType, cette classe ou structure

CUInt

UInteger, type de données

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, String, Object

CULng

ULong, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, String, Object

CUShort

UShort, type de données (Visual Basic)

Tout type numérique (y compris Byte, SByte et les types énumérés), Boolean, String, Object

La fonction CType

La CType, fonction opère sur deux arguments. Le premier correspond à l'expression à convertir, le second au 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 sont alors améliorées.

Pour obtenir une comparaison entre CType et les autres mots clés de conversion de type, consultez DirectCast et TryCast.

Types élémentaires

L'exemple suivant illustre l'utilisation du mot clé 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 le mot clé CType pour convertir des valeurs vers des types de données composites ou élémentaires. Vous pouvez également l'utiliser pour forcer la conversion d'une classe d'objet vers le 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 tableau

CType peut également convertir des types de données 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 obtenir des informations supplémentaires et un exemple, consultez Conversion des 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 obtenir des informations supplémentaires et un exemple, consultez Comment : définir un opérateur de conversion.

Remarque :

Les valeurs utilisées avec un mot clé de conversion doivent être acceptées par le type de données de destination, sans quoi une erreur se produit. Par exemple, si vous tentez de convertir un type Long en Integer, la valeur du type Long doit se situer dans la plage acceptée par le type de données Integer.

Attention :

La spécification de CType pour effectuer une conversion à partir d'un type de classe vers 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 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 cette classe, une conversion peut réussir si elle satisfait aux exigences de votre CType. Consultez Comment : définir un opérateur de conversion.

Pour désigner le processus de conversion explicite, on parle également de casting d'une expression vers un certain type de données ou une classe d'objet.

Voir aussi

Tâches

Comment : convertir un objet en un autre type dans Visual Basic

Dépannage des types de données

Concepts

Modification des valeurs lors de la conversion

Conversion entre des chaînes et d'autres types

Programmation sans type dans Visual Basic

Référence

Liste des types de données (Visual Basic)

Fonctions de conversion de types de données

Autres ressources

Conversions de type en Visual Basic

Structures constituées à partir de vos propres types de données