Dans Visual Basic, les variables à l'intérieur des procédures perdent généralement leur valeur après l'achèvement de l'appel. Le mot-clé Static permet à une variable de conserver sa valeur entre les appels de procédure.
Contexte de la question :
Dans le Visual Basic classique (VB6) et VB.NET, Static était souvent utilisé pour créer des compteurs et des indicateurs sans utiliser de champs de classe ou de module.
Problème :
Le développeur peut utiliser des variables locales ordinaires, s'attendant à leur "durabilité", alors qu'elles sont réinitialisées à chaque appel. D'autre part, l'endroit choisi (corps de procédure ou bloc de code) pour une variable statique peut être erroné.
Solution :
Déclarez la variable à l'aide de Static à l'intérieur de la procédure. Elle est initialisée une fois lors du premier appel de la procédure, puis conserve sa valeur entre les appels.
Exemple de code :
Sub CountCalls() Static counter As Integer = 0 counter += 1 Console.WriteLine($"Appel numéro : {counter}") End Sub ' Les appels provoqueront des valeurs différentes CountCalls() ' 1 CountCalls() ' 2 CountCalls() ' 3
Caractéristiques clés :
Static existe uniquement dans la portée de la procédure, mais conserve sa valeur entre les appelsQuelle est la différence entre Static dans une procédure et un champ de classe avec le modificateur Shared ?
Une variable Static n agit que dans cette procédure - chaque instance de la méthode dispose de sa propre variable statique indépendante. Un champ Shared de classe est unique pour toute la classe.
Peut-on déclarer une variable Static dans un bloc For ou If ?
Non, les variables Static ne peuvent être déclarées qu'au niveau supérieur de la procédure, elles ne peuvent pas être dans des blocs imbriqués (For, If).
Que se passe-t-il lors de l'appel d'une procédure avec Static depuis plusieurs threads ?
Dans la version VB.NET, la portée des variables Static est liée à chaque thread, ce qui peut entraîner des conditions de concurrence et des valeurs inattendues lors d'appels multithread.
Dans une procédure de calcul de la réaction d'un utilisateur à la pression d'une touche, Static est utilisé pour stocker le temps de déclenchement, mais il ne prend pas en compte les pressions simultanées par plusieurs utilisateurs (par exemple, application Web ou fenêtre multithread).
Avantages :
Inconvénients :
Static est utilisé pour stocker un compteur interne des appels d'une méthode utilitaire, appelée uniquement de manière synchrone à partir d'un seul thread.
Avantages :
Inconvénients :