Dans Visual Basic, la portée des variables est déterminée par leur emplacement de déclaration : à l'intérieur d'une procédure (variable locale), au niveau de la classe/module (variable de classe ou de module), ou en tant que globale (dans un fichier séparé).
Dim à l'intérieur d'une procédure — la variable est accessible uniquement dans cette procédure.Dim au niveau de la classe ou du module — accessible dans toutes les procédures de la classe/module.Public, Private, Friend — définit des restrictions d'accès depuis d'autres classes/modules.Exemple :
Module Module1 Dim moduleVar As Integer = 5 Sub Main() Dim localVar As Integer = 10 Console.WriteLine(moduleVar) ' Accessible Console.WriteLine(localVar) ' Accessible End Sub Sub OtherSub() Console.WriteLine(moduleVar) ' Accessible Console.WriteLine(localVar) ' Erreur! End Sub End Module
Quelle est la portée d'une variable déclarée avec le mot clé
Staticà l'intérieur d'une procédure ?
Réponse :
Une variable déclarée avec le mot clé Static à l'intérieur d'une procédure reste accessible uniquement à l'intérieur de cette procédure, mais sa valeur est conservée entre les appels de la procédure.
Exemple :
Sub Counter() Static count As Integer count = count + 1 Console.WriteLine(count) End Sub ' Chaque appel à Counter augmente count
Histoire
Dans le projet, une variable de drapeau Dim x As Boolean a été déclarée à l'intérieur d'une boucle For, en s'attendant à ce qu'elle "se réinitialise" à chaque itération (comme dans certains autres langages). Mais après avoir quitté la boucle, la variable est restée accessible, provoquant un comportement imprévisible après le deuxième appel à la procédure.
Histoire
Un des programmeurs a déclaré une variable publique dans le module, et elle a été accidentellement écrasée par un autre module portant le même nom, ce qui a entraîné des erreurs critiques dans différentes parties du programme. Cela a compliqué le débogage et personne n'a pu comprendre la cause.
Histoire
Un étudiant a déclaré une variable Static pour accumuler une somme dans une sous-procédure, pensant qu'elle "s'effaçait" à chaque appel. Résultat — lors des appels répétés, la somme augmentait, donnant un résultat incorrect.