マネージ コードの "基本正確性規則" 規則セット
基本の正確性は、フレームワーク API の使用に論理エラーとよくある間違いの規則セットの焦点を当てています。基本正確性規則は推奨規則の最小規則セット内の規則が含まれます。詳細については、「マネージ コードの "マネージ推奨規則" 規則セット」を参照してください。この規則セットは、最小推奨規則で報告された警告の一覧から、さらに詳しい情報へと掘り下げる必要がある場合に使用してください。
"Microsoft 基本正確性規則" 規則セット内のすべての規則について、以下の表で説明します。
規則 |
説明 |
---|---|
破棄可能なフィールドを所有する型は、破棄可能でなければなりません |
|
イベント ハンドラーを正しく宣言します |
|
アセンブリに AssemblyVersionAttribute を設定します |
|
インターフェイス メソッドは、子型によって呼び出し可能でなければなりません |
|
ネイティブ リソースを所有する型は、破棄可能でなければなりません |
|
P/Invoke を NativeMethods クラスに移動します |
|
基底クラス メソッドを非表示にしません |
|
IDisposable を正しく実装します |
|
予期しない場所に例外を発生させません |
|
重複するアクセラレータを使用しません |
|
P/Invoke エントリ ポイントは存在しなければなりません |
|
P/Invoke は参照可能であることはできません |
|
Auto 配置の型を COM 参照可能にすることはできません |
|
P/Invoke の直後に GetLastError を呼び出します |
|
COM 参照可能な型の基本型は COM 参照可能でなければなりません |
|
COM 登録メソッドは一致しなければなりません |
|
P/Invoke を正しく宣言します |
|
空のファイナライザーを削除します |
|
値型フィールドはポータブルでなければなりません |
|
P/Invoke 宣言はポータブルでなければなりません |
|
弱い ID を伴うオブジェクト上でロックしません |
|
SQL クエリのセキュリティ脆弱性を確認 |
|
P/Invoke 文字列引数に対してマーシャリングを指定します |
|
値型での宣言セキュリティを確認します |
|
ポインターは参照可能にすることはできません |
|
セキュリティで保護された型はフィールドを公開してはなりません |
|
メソッド セキュリティは型のスーパーセットでなければなりません |
|
APTCA メソッドは APTCA メソッドのみを呼び出すことができます |
|
APTCA 型は APTCA 基本型のみを拡張することができます |
|
リンク要求を含むメソッドを間接的に公開しません |
|
オーバーライドのリンク確認要求はベースと同様です。 |
|
脆弱性のある finally 句を外側の try でラップします |
|
型のリンク要求には継承要求が必要です |
|
セキュリティが重要な型は型の等価性に参加しないことがあります。 |
|
既定のコンストラクターは、基本型の既定コンストラクターと同程度以上、重要であることが必要 |
|
デリゲートは、一貫した透過性でメソッドにバインドしなければなりません |
|
メソッドと基本メソッドをオーバーライドする場合、一貫した透過性を保持する必要があります |
|
透過的メソッドは、検証可能な IL だけです |
|
透過的メソッドが、SuppressUnmanagedCodeSecurity 属性のメソッドを呼び出すことはできません |
|
透過的なコードではセキュリティが重要な重要項目を参照することはできません。 |
|
透過的メソッドは LinkDemands を満たすことはできません |
|
型は、基本型およびインターフェイスと同程度以上、重要でなければならない |
|
透過的メソッドにはセキュリティ アサートを使用できない場合もあります。 |
|
透過的メソッドは、ネイティブ コードを呼び出す必要があります |
|
スタック詳細を保持するために再度スローします。 |
|
オブジェクトを複数回破棄しない |
|
値型のスタティック フィールドのインラインを初期化します |
|
サービス コンポーネントを WebMethod に設定しません |
|
破棄可能なフィールドは破棄されなければなりません |
|
コンストラクターのオーバーライド可能なメソッドを呼び出しません |
|
破棄可能な型はファイナライザーを宣言しなければなりません |
|
ファイナライザーは基底クラスのファイナライザーを呼び出さなければなりません |
|
シリアル化コンストラクターを実装します |
|
ValueType.Equals のオーバーライドで、演算子 equals をオーバーロードします。 |
|
Windows フォームのエントリ ポイントを STAThread に設定します |
|
すべてのシリアル化不可能なフィールドを設定します |
|
ISerializable 型で基底クラス メソッドを呼び出します |
|
ISerializable 型を SerializableAttribute に設定します |
|
シリアル化メソッドを正しく実装します |
|
ISerializable を正しく実装します |
|
書式設定メソッドに正しい引数を提供 |
|
NaN に対して正しくテストします |
|
Enums は 0 値を含んでいなければなりません |
|
オーバーロードする加算および減算で、演算子 equals をオーバーロードします。 |
|
ローカライズされるパラメーターとしてリテラルを渡さない |
|
文字列を大文字に標準化します。 |
|
メソッドの結果を無視しない |
|
GC.SuppressFinalize を正しく呼び出します |
|
プロパティは、配列を返すことはできません。 |
|
文字列の長さを使用して空の文字列をテストします |
|
対象のフレームワークから API のみを使用します |
|
GC.KeepAlive への呼び出しを削除します |
|
SafeHandle を使用して、ネイティブ リソースを要約します |
|
汎用ハンドラーの CLSCompliant でない例外をキャッチします |
|
読み取り専用の変更可能な参照型を宣言しません |
|
配列フィールドを読み取り専用にすることはできません |
|
アサートをセキュリティで保護します |
|
ネイティブ リソースを使用しているときには GC.KeepAlive を呼び出します |
|
プライベート インターフェイスを満たすメソッドをシールします |
|
シリアル化コンストラクターをセキュリティで保護します |
|
静的コンストラクターはプライベートでなければなりません |
|
セキュリティが重要な定数は透過的です。 |
|
Win32 API に相当するマネージ API を使用します |
|
Dispose メソッドから基底クラスの Dispose を呼び出す |
|
ファイナライザーは保護されなければなりません |
|
継承されたメンバーの参照範囲を縮小しません |
|
メンバーは、戻り値の型以外にも異なる点がなければなりません |
|
演算子の Equals のオーバーロードのオーバーライドである |
|
演算子は対称型オーバーロードを含まなければなりません |
|
Collection プロパティは読み取り専用でなければなりません |
|
省略可能なフィールドに、逆シリアル化メソッドを指定します |