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 :
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); } }
Ordre d'exécution
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!