ProgrammationDéveloppeur VB.NET intermédiaire

Décrivez le mécanisme d'initialisation des variables statiques dans les procédures Visual Basic. Comment utiliser le mot-clé Static et quels sont les points d'attention à son utilisation ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

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 :

  • La variable Static existe uniquement dans la portée de la procédure, mais conserve sa valeur entre les appels
  • Non visible en dehors de la procédure
  • Utilisé uniquement avec des Value Types et String

Questions pièges.

Quelle 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.

Erreurs typiques et anti-patrons

  • Essayer d'utiliser Static avec des types de référence (Reference Types) en s'attendant à un objet commun pour tous les appels (un nouvel exemplaire est créé pour chaque Static)
  • Utiliser Static dans une procédure souvent appelée, ce qui conduit à une accumulation de mémoire

Exemple de la vie réelle

Cas négatif

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 :

  • Facile à implémenter un compteur d'appels

Inconvénients :

  • Ne fonctionne pas dans des scénarios multithreads
  • Difficile à tester

Cas positif

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 :

  • Ne nécessite pas de variables globales
  • Convient bien pour un état incrémental privé

Inconvénients :

  • Limité à la portée d'une seule procédure