型で明示的な静的コンストラクタを宣言すると、Just-In-Time (JIT) コンパイラは、静的コンストラクタが呼び出されたことを確認するために、型の静的メソッドと静的インスタンス コンストラクタのそれぞれにチェックを追加します。任意の静的メンバがアクセスされたとき、または型のインスタンスが作成されたときに、静的な初期化が発生します。ただし、可変の型を宣言していて使用しないと、静的な初期化は発生しません。初期化によってグローバルな状態が変化する場合、これは重要な問題になることがあります。
静的データがすべてインラインで初期化され、明示的な静的コンストラクタが宣言されていない場合、Microsoft Intermediate Language (MSIL) コンパイラは、beforefieldinit フラグと暗黙的な静的コンストラクタを追加します。これによって静的データは MSIL の型定義に初期化されます。JIT コンパイラで beforefieldinit フラグが検出されると、ほとんどの場合、静的コンストラクタのチェックは追加されません。静的な初期化は、静的フィールドのいずれかにアクセスされる前で、静的メソッドまたは静的インスタンス コンストラクタが呼び出される前のある時点で発生することが保証されています。静的な初期化は、可変の型が宣言された後であればいつでも発生する可能性があることに注意してください。
静的コンストラクタのチェックによってパフォーマンスが低下することがあります。多くの場合、静的コンストラクタは、静的フィールドを初期化するためにのみ使用されます。このとき必要なのは、静的な初期化が静的フィールドへ最初にアクセスされる前に発生することのみです。このような場合、および他のほとんどの型の場合、beforefieldinit の動作は適切です。静的な初期化によってグローバル状態に影響を及ぼし、さらに次のいずれかの条件に該当する場合は、不適切になります。