Contexte de la question
L'option Option Strict a été introduite dans Visual Basic .NET pour améliorer la sécurité des types. Dans les versions antérieures du langage (VB6), des conversions de types implicites se produisaient, ce qui entraînait un comportement inattendu du programme et des erreurs difficiles à détecter. Activer Strict rend le comportement plus explicite et strictement typé.
Problème
Les conversions de types implicites (par exemple, l'attribution d'une chaîne à une variable numérique ou le retour de différents types d'une fonction) entraînent des erreurs au moment de l'exécution. Les projets avec Option Strict Off sont souvent à l'origine de bugs difficiles à identifier.
Solution
Avec Option Strict On, les conversions de types implicites ne sont pas autorisées, toutes les déclarations de variables, les paramètres et les types de retour des fonctions doivent être explicitement spécifiés. Cela prévient toute une classe d'erreurs déjà au moment de la compilation et favorise une haute qualité de code.
Exemple de code :
Option Strict On Dim x As Integer x = "123" ' Erreur de compilation — la conversion explicite est obligatoire x = CInt("123") ' OK Function GetNumber(ByVal input As String) As Integer Return input ' Erreur de compilation End Function
Caractéristiques clés :
Pourquoi avoir besoin de Option Strict Off, si Strict On est plus pratique et sûr ?
Option Strict Off est utilisé pour soutenir l'ancien code où de nombreuses conversions implicites sont déjà intégrées (par exemple, migration depuis VB6). Dans de nouveaux projets, il est recommandé d'activer Strict pour un code plus fiable et sécurisé.
Peut-on rétablir la rigueur du choix des types au niveau du fichier, si le projet est par défaut Off ?
Oui, vous pouvez ajouter la directive Option Strict On au début d'un module ou d'un fichier spécifique, et la vérification stricte des types sera appliquée uniquement à ce fichier.
' Au début du fichier : Option Strict On
Strict empêche-t-il d'utiliser le late binding via Object ?
Oui, avec Option Strict On, il n'est pas possible d'appeler des membres d'objets non reconnus au moment de la compilation (late binding). Il faut convertir les objets à un type connu via des interfaces ou utiliser un fonctionnement dynamique uniquement avec Off.
Un programmeur n'a pas activé Option Strict, et lors de la saisie de données à partir d'une zone de texte TextBox, les valeurs étaient directement attribuées à des variables numériques. L'entrée de données erronées faisait planter le programme.
Avantages :
Inconvénients :
Le programmeur a activé Option Strict On, toutes les conversions étaient effectuées explicitement via TryParse. Les erreurs étaient détectées au moment de la compilation, les exceptions au moment de l'exécution étaient minimales.
Avantages :
Inconvénients :