Conversions étendues et restrictives (Visual Basic)
Le fait que le résultat se situe ou non dans la plage du type de données de destination constitue un élément d'information important dans la conversion de type.
Une conversion étendue modifie une valeur à un type de données qui peut tenir compte de la valeur possible des données d'origine. Les conversions étendues préservent la valeur source, mais peuvent modifier sa représentation. Cela se produit si vous convertissez un type intégral à Decimal, ou d' Char à String.
Dans une conversion restrictive, la valeur est convertie dans un type de données susceptible de ne pas pouvoir accueillir certaines valeurs possibles des données. Par exemple, une valeur fractionnaire est arrondie lorsqu'elle est convertie en un type intégral, et un type numérique converti à Boolean est réduit au True ou à False.
Conversions étendues
Le tableau suivant répertorie les conversions étendues standard.
Type de données |
Extension aux types de données 1 |
SByte, Short, Integer, Long, Decimal, Single, Double |
|
Byte, Short, UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Short, Integer, Long, Decimal, Single, Double |
|
UShort, Integer, UInteger, Long, ULong, Decimal, Single, Double |
|
Integer, Long, Decimal, Single, Double2 |
|
UInteger, Long, ULong, Decimal, Single, Double 2 |
|
Long, Decimal, Single, Double 2 |
|
ULong, Decimal, Single, Double 2 |
|
Decimal, Single, Double 2 |
|
Single, Double |
|
Double |
|
Tout type énuméré (Enum) |
Son type intégral sous-jacent et tout type auquel le type sous-jacent s'étend. |
Char, String |
|
Tableau Char |
Tableau Char, String |
Tout type |
|
Tout type dérivé |
tout type de base dont il est dérivé 3. |
Tout type |
Toute interface qu'il implémente. |
tout type de données ou type d'objet. |
1 Par définition, chaque type de données s'élargit par lui-même.
2 Les conversions de Integer, UInteger, Long, ULong ou Decimal en Single ou Double peuvent entraîner un manque de précision, mais jamais une perte d'amplitude. Elles n'entraînent donc jamais de perte d'information.
3 Il peut sembler surprenant qu'une conversion entre un type dérivé et l'un de ses types de base soit étendue. Cela s'explique par le fait que le type dérivé contient tous les membres du type de base ; il se qualifie donc comme une instance du type de base. Dans le sens opposé, le type de base ne contient aucun nouveau membre défini par le type dérivé.
Les conversions étendues réussissent toujours au moment de l'exécution et sans jamais aucune perte de données. Vous pouvez toujours les exécuter implicitement, que l'Option Strict, instruction attribue la valeur On ou Off au commutateur de vérification de type.
Conversions restrictives
Les conversions restrictives standard sont les suivantes :
Conversions inverses des conversions étendues dans le tableau précédent (excepté que chaque type s'élargit par lui-même).
Conversions entre un type Boolean et tout type numérique (dans l'un et l'autre sens).
Conversions de n'importe quel type numérique en un type énuméré (Enum).
Conversions dans l'un et l'autre sens entre String et tout type numérique, Boolean ou Date.
Conversions entre un type de données ou un type d'objet et un type dérivé de lui.
Les conversions restrictives ne réussissent pas toujours au moment de l'exécution et peuvent échouer ou entraîner la perte de données. Une erreur se produit si le type de données de destination ne peut pas accueillir la valeur convertie. Par exemple, une conversion numérique peut provoquer un dépassement de capacité. Le compilateur ne vous permet pas d'exécuter des conversions restrictives implicitement sauf si l'Option Strict, instruction attribue la valeur Off au commutateur de vérification de type.
Notes
L'erreur de conversion restrictive est supprimée pour les conversions à partir des éléments d'une collection For Each…Next vers la variable de contrôle de boucle.Pour plus d'informations et d'exemples, consultez la section « Conversions restrictives » dans For Each...Next, instruction (Visual Basic).
Utilisation des conversions restrictives
Utilisez une conversion restrictive lorsque vous savez que la valeur source peut être convertie dans le type de données de destination sans erreur ni perte de données. Par exemple, si vous avez String qui contient « true » ou « False », vous pouvez utiliser le mot clé d' CBool pour le convertir en Boolean.
Exceptions pendant la conversion
Étant donné que les conversions étendues aboutissent toujours, elles ne lèvent pas d'exceptions. Les conversions restrictives, lorsqu'elles échouent, lèvent le plus souvent les exceptions suivantes :
InvalidCastException — si aucune conversion n'est définie entre les deux types
OverflowException — (types intégraux uniquement) si la valeur convertie est trop grande pour le type cible
Si une classe ou une structure définit Fonction CType (Visual Basic) pour qu'il serve d'opérateur de conversion vers ou depuis cette classe ou cette structure, CType peut lever n'importe quelle exception qu'il estime appropriée. De plus, CType peut appeler des fonctions Visual Basic ou des méthodes .NET Framework qui peuvent à leur tour lever diverses exceptions.
Modification lors des conversions de type référence
Une conversion à partir d'un type référence ne copie que le pointeur vers la valeur. La valeur elle-même n'est ni copiée ni modifiée. Seul peut être modifié le type de données de la variable contenant le pointeur. Dans l'exemple suivant, le type de données est converti de la classe dérivée vers sa classe de base, mais l'objet vers lequel pointent les deux variables reste inchangé.
' Assume class cSquare inherits from class cShape.
Dim shape As cShape
Dim square As cSquare = New cSquare
' The following statement performs a widening
' conversion from a derived class to its base class.
shape = square
Voir aussi
Tâches
Comment : convertir un objet en un autre type dans Visual Basic
Référence
Liste des types de données (Visual Basic)
Fonctions de conversion de types de données (Visual Basic)
Concepts
Types de données en Visual Basic
Conversions implicites et explicites (Visual Basic)
Conversion entre des chaînes et d'autres types (Visual Basic)
Conversion des tableaux (Visual Basic)