Maison > développement back-end > C++ > Comment C# garantit-il un ordre déterministe pour l'initialisation de classe statique ?

Comment C# garantit-il un ordre déterministe pour l'initialisation de classe statique ?

Mary-Kate Olsen
Libérer: 2025-01-03 17:19:42
original
648 Les gens l'ont consulté

How Does C# Guarantee a Deterministic Order for Static Class Initialization?

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é :

  1. Le référencement de A.X dans Main déclenche l'initialisation de A.X.
  2. L'initialisation de A.X nécessite B.X, elle lance donc l'initialisation de B.X.
  3. B.X se voit attribuer une valeur par défaut de 7. Sortie : "B.X = 7."
  4. Statique B( ) est appelé, produisant "B.X = 0."
  5. A.X est initialisé comme B.X 1, ce qui donne A.X = 1.
  6. Static A() est appelé, produisant "A.X = 1."
  7. 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal