静的コンストラクターは、静的メンバーに初めてアクセスしたときに実行されます。これを知って、私はいくつかの質問があります:
- これは、静的メソッドにアクセスするたびに、ランタイムが静的コンストラクターが呼び出されたかどうかを確認する必要があることを意味しますか?
- これによりパフォーマンスが低下しますか?
- 「コンストラクターレス」静的クラスは、このパフォーマンスへの影響を回避しますか?
[編集]:私はマイクロ最適化には関心がないことを明確にしたいと思います。これは設計上の決定
であるため、私はこの質問をしています。静的コンストラクターでパフォーマンスが低下した場合は、それを念頭に置いてコードを設計し、パフォーマンスに影響を与える可能性のある決定をよりよく認識します。
これが私の質問を説明するための例です。Independent
メソッドを取得して別の静的クラスに入れることの利点はありますか?そうすれば、staticTest
が初期化されているかどうかを確認する必要がなくなります。[更新より良い、より簡単な例については、以下の私の答えを参照してください]。
static class Test {
// Static constructor with dependent method:
static int x;
static Test() { x = 5; }
static int Dependent() { return x; }
// Static, independent method:
static int Independent(int y) { return y+1; }
}
静的コンストラクターに関するC#仕様からの引用は次のとおりです。
静的コンストラクターの実行は、アプリケーションドメイン内で発生する次のイベントの最初のものによってトリガーされます。
- クラスのインスタンスが作成されます。
- クラスの静的メンバーのいずれかが参照されます。