Ist die Reihenfolge der statischen Klasseninitialisierung in C# deterministisch?
Die Reihenfolge der statischen Klasseninitialisierung in C# ist tatsächlich deterministisch. Gemäß ECMA-334-Standard:
Beispiel für eine Initialisierungsreihenfolge
Beachten Sie den folgenden Code:
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); } }
Ausführungsreihenfolge
Überlegungen zur Neuordnung
Auch wenn die Klassen A und B neu geordnet werden, bleibt die Reihenfolge von Die Initialisierung bleibt gleich, da die erste Verwendung von A.X die Initialisierungskette auslöst.
Fazit
Die Reihenfolge der statischen Klasseninitialisierung ist deterministisch und folgt den in der ECMA dargelegten Regeln -334-Standard. Die erste Verwendung eines statischen Mitglieds oder die Erstellung einer Instanz löst den Initialisierungsprozess aus, der in der Reihenfolge der Feldinitialisierer gefolgt vom statischen Konstruktor abläuft.
Das obige ist der detaillierte Inhalt vonIst die Initialisierungsreihenfolge der statischen Klasse von C# vorhersehbar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!