更新 : 2007 年 11 月
TypeName |
InitializeValueTypeStaticFieldsInline |
CheckId |
CA2207 |
カテゴリ |
Microsoft.Usage |
互換性に影響する変更点 |
なし |
原因
値型で明示的な静的コンストラクタを宣言しています。
規則の説明
値型を宣言すると、既定の初期化が行われます。このとき、値型のフィールドはすべてゼロに設定され、参照型のフィールドはすべて null (Visual Basic では Nothing) に設定されます。明示的な静的コンストラクタは、インスタンス コンストラクタまたはその型の静的メンバが呼び出される前に実行することが保証されているだけです。そのため、インスタンス コンストラクタを呼び出さずに型が作成されると、静的コンストラクタの実行は保証されません。
静的データがインラインで初期化され、明示的な静的コンストラクタが宣言されない場合、C# と Visual Basic のコンパイラによって MSIL クラス定義に beforefieldinit フラグが追加されます。また、コンパイラによって、静的な初期化コードを含むプライベートの静的コンストラクタも追加されます。プライベートの静的コンストラクタは、型の静的フィールドのいずれかにアクセスする前に実行することが保証されます。
違反の修正方法
この規則違反を修正するには、静的データが宣言されたとき、および静的コンストラクタを削除するときに、静的データをすべて初期化します。
警告を抑制する状況
この規則による警告は抑制しないでください。