Deterministische Reihenfolge der statischen Klasseninitialisierung in C#
Die Reihenfolge der statischen Klasseninitialisierung in C# wird durch die ECMA-Spezifikation klargestellt. Diese Reihenfolge stellt die Konsistenz des Programmverhaltens sicher.
Gemäß ECMA-334:
- Wenn ein statischer Feldinitialisierer vorhanden ist, wird er unmittelbar vor dem entsprechenden statischen Konstruktor ausgeführt.
- Wenn kein statischer Konstruktor vorhanden ist, werden Initialisierer zu einem von der Implementierung abhängigen Zeitpunkt ausgeführt, bevor ein statisches Feld des verwendet wird Klasse.
- Die Ausführung eines statischen Konstruktors wird ausgelöst, wenn entweder eine Instanz der Klasse erstellt oder auf ein statisches Mitglied verwiesen wird.
- In Klassen mit einer Main-Methode wird der statische Konstruktor vor dem Eintritt in die Klasse ausgeführt Main-Methode.
Im angegebenen Codebeispiel:
- Referenzierung auf A.X in Main löst die Initialisierung von A.X aus.
- A.X-Initialisierung erfordert B.X, daher initiiert sie die B.X-Initialisierung.
- B.X wird ein Standardwert von 7 zugewiesen. Ausgabe: „B.X = 7.“
- Static B() wird aufgerufen und gibt „B.X = 0“ aus.
- A.X ist initialisiert als B.X 1, was zu A.X = 1 führt.
- Static A() wird aufgerufen und gibt „A.X = 1“ aus.
- Schließlich gibt Main „A = 1, B = 0“ aus. „
Der Standard rät davon ab, statische Felder mit variablen Initialisierern in ihrem Standardzustand zu beobachten und beizubehalten Konsistenz.
Das obige ist der detaillierte Inhalt vonWie garantiert C# eine deterministische Reihenfolge für die Initialisierung statischer Klassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!