Partager via


Conversion explicite

Certains compilateurs exigent une conversion explicite pour prendre en charge les conversions restrictives. Il s'agit d'une façon d'effectuer les conversions propres au langage utilisé. Dans certains langages tels que C# et C++, la conversion explicite s'effectue en utilisant le casting. Le casting se produit lorsque vous préfixez une conversion avec un type de données qui définit le type de conversion que vous voulez effectuer. En Visual Basic, la fonction CType est utilisée pour permettre les conversions explicites des types de données qui ne sont pas permises de façon implicite. Bien que la plupart des langages ayant pour cible le Common Language Runtime prennent en charge la conversion explicite, le mécanisme exact diffère d'un langage à l'autre. Certains langages ayant pour cible le Common Language Runtime peuvent exiger qu'une conversion spécifique soit effectuée de façon explicite, alors que d'autres permettent que la même conversion s'effectue de façon implicite. Consultez la documentation du langage que vous utilisez pour en savoir plus sur les conversions explicites.

Les conversions explicites peuvent s'effectuer de manière contrôlée ou non contrôlée. Lorsqu'une conversion contrôlée est effectuée, une exception OverflowException est levée si la valeur maximale du type cible est inférieure à la valeur du type converti. Lorsqu'une conversion non contrôlée est effectuée dans les mêmes circonstances, la valeur convertie n'entraîne pas nécessairement la levée d'une exception, mais le comportement exact devient indéfini.

Dans certains langages tels que le C#, il est possible d'effectuer un cast non contrôlé. Dans ce cas, une valeur incorrecte peut être produite et aucune exception OverflowException ne sera levée. Le comportement d'une telle conversion est indéfini et non fiable. L'exemple de code suivant illustre un cast C# non contrôlé.

// The integer value is set to 2147483647.
int MyInt = int.MaxValue;
byte MyByte = (byte)Myint;
// The value of MyByte is 255, the maximum value of a Byte.
// No overflow exception is thrown.

L'exemple de code suivant illustre une conversion explicite utilisant la fonction CType contrôlée en Visual Basic et un casting contrôlé en C#. Dans cet exemple, la valeur Double de 123456789 est convertie en une valeur entière.

Dim MyDouble As Double = 123456789
Dim MyInt As Integer = CType(MyDouble, Integer)
' The value MyInt has the value 123456789. 
double MyDouble = 123456789;
int MyInt = checked ((int)MyDouble);
// The value MyInt has the value 123456789.

Notez que la conversion explicite peut produire des résultats différents selon les langages. Consultez la documentation du langage que vous utilisez pour plus d'information sur le comportement des conversions explicites. Par exemple, lors de la conversion d'une valeur Double en une valeur Int32 en Visual Basic, à l'aide de la fonction CType, un arrondi est effectué. Cependant, lorsque la même conversion est effectuée à l'aide d'une conversion explicite en C#, les valeurs de droite sont perdues. L'exemple de code suivant utilise la conversion explicite pour convertir une valeur double en une valeur entière.

Dim MyDouble As Double = 42.72
Dim MyInt As Integer = CType(MyDouble, Integer)
' MyInt has the value of 43.
Double MyDouble = 42.72;
int MyInt = checked ((int)MyDouble);
// MyInt has the value of 42.

Voir aussi

Référence

System.Convert

Autres ressources

Conversion de types