Ordre déterministe d'initialisation des classes statiques en C#
L'ordre d'initialisation des classes statiques en C# est clarifié par la spécification ECMA. Cet ordre garantit la cohérence du comportement du programme.
Selon ECMA-334 :
- Lorsqu'un initialiseur de champ statique existe, il s'exécute immédiatement avant le constructeur statique correspondant.
- S'il n'y a pas de constructeur statique, les initialiseurs s'exécutent à un moment dépendant de l'implémentation avant d'utiliser un champ statique de la classe.
- Exécution d'un constructeur statique se déclenche lorsqu'une instance de la classe est créée ou qu'un membre statique est référencé.
- Dans les classes avec une méthode Main, le constructeur statique s'exécute avant d'entrer dans la méthode Main.
Dans l'exemple de code donné :
- Le référencement de A.X dans Main déclenche l'initialisation de A.X.
- L'initialisation de A.X nécessite B.X, elle lance donc l'initialisation de B.X.
- B.X se voit attribuer une valeur par défaut de 7. Sortie : "B.X = 7."
- Statique B( ) est appelé, produisant "B.X = 0."
- A.X est initialisé comme B.X 1, ce qui donne A.X = 1.
- Static A() est appelé, produisant "A.X = 1."
- Enfin, Main imprime "A = 1, B = 0."
La norme déconseille d'observer les champs statiques avec des initialiseurs variables dans leur état par défaut pour maintenir la cohérence.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!