Opérateur DirectCast (Visual Basic)
Introduit une opération de conversion de type basée sur l’héritage ou l’implémentation.
Notes
DirectCast
n’utilise pas les routines d’assistance au moment de l’exécution de Visual Basic pour la conversion, de sorte qu’il peut fournir de meilleures performances que CType
lors de la conversion vers et à partir du type de données Object
.
Vous utilisez le mot clé DirectCast
similaire à la façon dont vous utilisez la fonction CType et le mot clé de l’opérateur TryCast. Vous fournissez une expression comme premier argument et un type pour la convertir en tant que deuxième argument. DirectCast
nécessite une relation d’héritage ou d’implémentation entre les types de données des deux arguments. Cela signifie qu’un type doit hériter ou implémenter l’autre type.
Erreurs et défaillances
DirectCast
génère une erreur du compilateur s’il détecte qu’aucune relation d’héritage ou d’implémentation n’existe. Toutefois, l’absence d’erreur du compilateur ne garantit pas la réussite de la conversion. Si la conversion souhaitée est restrictive, elle peut échouer au moment de l’exécution. Si cela se produit, le runtime lève une erreur InvalidCastException.
Mots clés de conversion
Voici une comparaison des mots-clés de conversion de type.
Mot clé | Types de données | Relation d’argument | Échec de l’exécution |
---|---|---|---|
CType Function | Tous les types de données | La conversion d’élargissement ou de réduction doit être définie entre les deux types de données | Lève InvalidCastException |
DirectCast |
Tous les types de données | Un type doit hériter ou implémenter l’autre type | Lève InvalidCastException |
TryCast, opérateur | Types de référence uniquement | Un type doit hériter ou implémenter l’autre type | Renvoie Nothing |
Exemple
L’exemple suivant illustre deux utilisations de DirectCast
, l’une qui échoue au moment de l’exécution et l’autre qui réussit.
Dim q As Object = 2.37
Dim i As Integer = CType(q, Integer)
' The following conversion fails at run time
Dim j As Integer = DirectCast(q, Integer)
Dim f As New System.Windows.Forms.Form
Dim c As System.Windows.Forms.Control
' The following conversion succeeds.
c = DirectCast(f, System.Windows.Forms.Control)
Dans l’exemple précédent, le type de runtime de q
est Double
. CType
réussit, car Double
peut être converti en Integer
. Toutefois, le premier DirectCast
échoue au moment de l’exécution, car le type de runtime de Double
n’a aucune relation d’héritage avec Integer
, même s’il existe une conversion. La seconde DirectCast
réussit, car elle convertit de type Form en type Control, dont Form hérite.