Maison > développement back-end > C++ > L'ordre d'initialisation des classes statiques de C# est-il garanti déterministe ?

L'ordre d'initialisation des classes statiques de C# est-il garanti déterministe ?

Barbara Streisand
Libérer: 2025-01-04 15:07:40
original
570 Les gens l'ont consulté

Is C#'s Static Class Initialization Order Guaranteed to Be Deterministic?

L'ordre d'initialisation des classes statiques en C# est-il déterministe ?

En C#, les classes statiques sont initialisées lors de leur première utilisation. Cependant, la séquence d'initialisation entre plusieurs classes statiques n'est pas toujours évidente. Cet article explore la nature déterministe de l'initialisation de classe statique en C# et comment elle affecte l'exécution du code.

Ordre d'initialisation déterministe

L'ordre d'initialisation de classe statique est régi par les règles suivantes :

  • Si un initialiseur de champ statique existe dans une classe, il est exécuté immédiatement avant l'initialiseur de champ statique de la classe. constructeur.
  • Si un constructeur statique existe dans une classe, son exécution est déclenchée lorsque l'un des membres statiques de la classe est référencé ou lorsqu'une instance de la classe est créée.
  • Si une classe contient la méthode Main, son constructeur statique est exécuté avant que Main ne soit appelé.

Exemple

Considérez le code suivant :

static class B
{
    public static int X = 7;
    static B() { Console.WriteLine("B.X = " + X); X = A.X; Console.WriteLine("B.X = " + X); }
}

static class A
{
    public static int X = B.X + 1;
    static A() { Console.WriteLine("A.X = " + X); }
}

static class Program
{
    static void Main()
    {
        Console.WriteLine("A = {0}, B = {1}", A.X, B.X);
    }
}
Copier après la connexion

Ce code illustre la nature déterministe de l'initialisation de classe statique. Lorsque A.X est référencé dans Main, son constructeur statique est exécuté. A.X est initialisé en utilisant B.X, ce qui déclenche l'initialisation de B. Ainsi, la sortie du code sera toujours :

A.X = 1
B.X = 7
B.X = 0
A = 1, B = 0
Copier après la connexion

Conclusion

Initialisation de la classe statique en C# suit un ordre bien défini. Comprendre cet ordre est crucial pour écrire du code qui se comporte comme prévu. En adhérant aux règles décrites ci-dessus, les développeurs peuvent garantir que leurs classes statiques sont initialisées correctement et de manière cohérente, même lors de plusieurs compilations et exécutions.

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