Heim > Backend-Entwicklung > C++ > Ist die Initialisierungsreihenfolge der statischen Klasse von C# garantiert deterministisch?

Ist die Initialisierungsreihenfolge der statischen Klasse von C# garantiert deterministisch?

Barbara Streisand
Freigeben: 2025-01-04 15:07:40
Original
565 Leute haben es durchsucht

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

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:

  • Wenn in einer Klasse ein statischer Feldinitialisierer vorhanden ist, wird dieser unmittelbar vor dem statischen Feldinitialisierer der Klasse ausgeführt Konstruktor.
  • Wenn ein statischer Konstruktor in einer Klasse vorhanden ist, wird seine Ausführung ausgelöst, wenn auf eines der statischen Mitglieder der Klasse verwiesen wird oder wenn eine Instanz der Klasse erstellt wird.
  • Wenn eine Klasse enthält Bei der Main-Methode wird ihr statischer Konstruktor vor Main ausgeführt aufgerufen.

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);
    }
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage