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

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

DDD
Libérer: 2025-01-04 20:15:41
original
903 Les gens l'ont consulté

Is C#'s Static Class Initialization Order Predictable?

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

L'ordre d'initialisation des classes statiques en C# est en effet déterministe. Selon la norme ECMA-334 :

  • Les initialiseurs de champs statiques sont exécutés immédiatement avant le constructeur statique.
  • L'exécution d'un constructeur statique est déclenchée par la première utilisation d'un champ statique ou lorsqu'une instance de la classe est créée.
  • Si la classe contient Main(), son constructeur statique s'exécute avant que Main() ne soit appelé.

Exemple d'ordre d'initialisation

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

Ordre d'exécution

  1. A.X est utilisé dans Main(), déclenchant l'initialisation de A().
  2. L'initialisation de A().X nécessite B.X, appelant B().
  3. B().X est initialisé à 7 (Console.WriteLine("B.X = 7") ).
  4. B().X est modifié et Console.WriteLine("B.X = 0") est exécuté.
  5. A().X est défini sur B.X 1 (Console.WriteLine("A.X = 1")).
  6. Console.WriteLine("A = 1, B = 0") est affiché.

Considérations sur le réarrangement

Même si les classes A et B sont réorganisées, l'ordre de l'initialisation reste la même car la première utilisation de A.X déclenche la chaîne d'initialisation.

Conclusion

L'ordre d'initialisation de la classe statique est déterministe et suit les règles décrites dans l'ECMA -Norme 334. La première utilisation d'un membre statique ou la création d'une instance déclenchera le processus d'initialisation, qui se déroule dans l'ordre des initialiseurs de champ suivis du constructeur statique.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal