Ist die Initialisierungsreihenfolge statischer Klassen in C# deterministisch?
In C# werden statische Klassen initialisiert, wenn sie zum ersten Mal verwendet werden. Allerdings ist die Reihenfolge der Initialisierung zwischen mehreren statischen Klassen nicht immer klar. In diesem Artikel wird die deterministische Natur der statischen Klasseninitialisierung in C# untersucht und wie sie sich auf die Ausführung von Code auswirkt.
Deterministische Initialisierungsreihenfolge
Die Reihenfolge der statischen Klasseninitialisierung wird festgelegt durch die folgenden Regeln:
Beispiel
Betrachten 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); } }
Dieser Code veranschaulicht die deterministische Natur der statischen Klasseninitialisierung. Wenn A.X in Main referenziert wird, wird sein statischer Konstruktor ausgeführt. A.X wird mithilfe von B.X initialisiert, was die Initialisierung von B auslöst. Daher lautet die Ausgabe des Codes immer:
A.X = 1 B.X = 7 B.X = 0 A = 1, B = 0
Schlussfolgerung
Statische Klasseninitialisierung in C# folgt einer genau definierten Reihenfolge. Das Verständnis dieser Reihenfolge ist entscheidend für das Schreiben von Code, der sich wie beabsichtigt verhält. Durch die Einhaltung der oben beschriebenen Regeln können Entwickler sicherstellen, dass ihre statischen Klassen auch über mehrere Kompilierungen und Ausführungen hinweg korrekt und konsistent initialisiert werden.
Das obige ist der detaillierte Inhalt vonIst die Initialisierungsreihenfolge der statischen Klasse von C# garantiert deterministisch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!