C# における静的クラスの初期化の決定的な順序
C# における静的クラスの初期化の順序は、ECMA 仕様によって明確にされています。この順序により、プログラム動作の一貫性が保証されます。
ECMA-334 によると:
- 静的フィールド初期化子が存在する場合、対応する静的コンストラクターの直前に実行されます。
- 静的コンストラクターがない場合、初期化子は、静的フィールドを使用する前に実装に依存した時間で実行されます。 class.
- 静的コンストラクターの実行は、クラスのインスタンスが作成されるか、静的メンバーが参照されるときにトリガーされます。
- Main メソッドを持つクラスでは、静的コンストラクターは、クラスに入る前に実行されます。 Main メソッド。
指定されたコード内サンプル:
- Main で A.X を参照すると、A.X の初期化がトリガーされます。
- A.X の初期化には B.X が必要なので、B.X の初期化が開始されます。
- B.X にはデフォルト値の が割り当てられます。 7. 出力:「B.X = 7."
- Static B() が呼び出され、"B.X = 0" が出力されます。
- A.X は B.X 1 として初期化され、結果として A.X = 1 になります。
- Static A () が呼び出され、「A.X = 1」が出力されます。
- 最後に、Main が出力します。 "A = 1, B = 0."
標準では、一貫性を維持するために、デフォルト状態の変数初期化子を使用して静的フィールドを観察することを推奨していません。
以上がC# は静的クラス初期化の決定的な順序をどのように保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。