ホームページ > バックエンド開発 > C++ > C# は静的クラス初期化の決定的な順序をどのように保証しますか?

C# は静的クラス初期化の決定的な順序をどのように保証しますか?

Mary-Kate Olsen
リリース: 2025-01-03 17:19:42
オリジナル
694 人が閲覧しました

How Does C# Guarantee a Deterministic Order for Static Class Initialization?

C# における静的クラスの初期化の決定的な順序

C# における静的クラスの初期化の順序は、ECMA 仕様によって明確にされています。この順序により、プログラム動作の一貫性が保証されます。

ECMA-334 によると:

  • 静的フィールド初期化子が存在する場合、対応する静的コンストラクターの直前に実行されます。
  • 静的コンストラクターがない場合、初期化子は、静的フィールドを使用する前に実装に依存した時間で実行されます。 class.
  • 静的コンストラクターの実行は、クラスのインスタンスが作成されるか、静的メンバーが参照されるときにトリガーされます。
  • Main メソッドを持つクラスでは、静的コンストラクターは、クラスに入る前に実行されます。 Main メソッド。

指定されたコード内サンプル:

  1. Main で A.X を参照すると、A.X の初期化がトリガーされます。
  2. A.X の初期化には B.X が必要なので、B.X の初期化が開始されます。
  3. B.X にはデフォルト値の が割り当てられます。 7. 出力:「B.X = 7."
  4. Static B() が呼び出され、"B.X = 0" が出力されます。
  5. A.X は B.X 1 として初期化され、結果として A.X = 1 になります。
  6. Static A () が呼び出され、「A.X = 1」が出力されます。
  7. 最後に、Main が出力します。 "A = 1, B = 0."

標準では、一貫性を維持するために、デフォルト状態の変数初期化子を使用して静的フィールドを観察することを推奨していません。

以上がC# は静的クラス初期化の決定的な順序をどのように保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート