Casting implicite dans VB.NET
-
26-09-2019 - |
Question
La question est destinée aux programmeurs VB paresseux. S'il vous plaît.
Dans VB, je peux faire et je n'obtiendrai aucune erreur.
Exemple 1
Dim x As String = 5
Dim y As Integer = "5"
Dim b As Boolean = "True"
Exemple 2
Dim a As EnumType = 4
Dim v As Integer = EnumType.EnumValue
Exemple 3
Private Sub ButtonClick(sender As Object, e As EventArgs)
Dim btn As Button = sender
End Sub
Exemple 4
Private Sub ButtonClick(sender As Button, e As EventArgs)
Dim data As Contact = sender.Tag
End Sub
Si je connais sûrement le type d'exécution attendu, est-ce «interdit» de s'appuyer sur le casting intégré en langue VB? Quand puis-je compter?
La solution
Commentez à Markj se déplacer pour répondre par OP
N'hésitez pas à compter sur tout ce que vous voulez, assurez-vous simplement de connaître les règles de ce que fait le casting implicite. Cela dit, l'exemple n ° 4 semble vraiment facile à briser à l'avenir, je serais beaucoup plus heureux s'il y avait au moins une vérification nul auparavant.
Autres conseils
Il n'est certainement pas "interdit" d'utiliser Option Strict Off
Mais presque tout le monde conseille fortement d'utiliser Option Strict On
.
Les raisons sont expliquées dans d'autres questions, par exemple cette.
Si vous utilisez Visual Basic 2008, une autre option consiste à faire le casting explicity (par exemple, l'option stricte) et à compter sur l'option implicite afin que vous n'ayez pas besoin d'écrire le type deux fois.
Dim x = 5.ToString()
Dim data = DirectCast(sender.Tag, Contact)
L'ironie des pratiques "paresseuses" comme celle-ci est qu'elles finissent souvent par vous coûter plus de temps à long terme. Pouvez-vous vraiment être absolument certain que vos entrées seront toujours dans un format qui peut automatiquement être jeté au type prévu, en toutes circonstances et dans tous les lieux?
Penser à toutes les implications possibles et gérer les bogues presque inévitables prendra probablement plus de temps que de taper fortement vos variables, de valider strictement vos entrées et de lancer explicitement si nécessaire.