値型を宣言すると、既定の初期化が行われます。このとき、値型のフィールドはすべてゼロに設定され、参照型のフィールドはすべて null (Visual Basic では Nothing) に設定されます。明示的な静的コンストラクタは、インスタンス コンストラクタまたはその型の静的メンバが呼び出される前に実行することが保証されているだけです。そのため、インスタンス コンストラクタを呼び出さずに型が作成されると、静的コンストラクタの実行は保証されません。
静的データがインラインで初期化され、明示的な静的コンストラクタが宣言されない場合、C# と Visual Basic のコンパイラによって MSIL クラス定義に beforefieldinit フラグが追加されます。また、コンパイラによって、静的な初期化コードを含むプライベートの静的コンストラクタも追加されます。プライベートの静的コンストラクタは、型の静的フィールドのいずれかにアクセスする前に実行することが保証されます。