マネージ コードの "拡張デザイン ガイドライン規則" 規則セット
"Microsoft 拡張デザイン ガイドライン規則" 規則セットは、基本デザイン ガイドライン規則をさらに掘り下げて、使用可能性と保守容易性に関する問題の検出件数を最大化するためのものです。特に、命名に関するガイドラインに重点が置かれています。プロジェクトにライブラリ コードが含まれる場合や、保守が容易なコードを記述するために最高レベルの基準を適用する場合は、この規則セットの使用を検討してください。
"拡張デザイン ガイドライン規則" には、"Microsoft 基本デザイン ガイドライン規則" 内のすべての規則が含まれます。"基本デザイン ガイドライン規則" には、"Microsoft 最小推奨規則" 内のすべての規則が含まれます。詳細については、「マネージ コードの "基本デザイン ガイドライン規則" 規則セット」および「マネージ コードの "マネージ推奨規則" 規則セット」を参照してください。
"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 をオーバーロードします。 |
|
アセンブリに CLSCompliantAttribute を設定します |
|
アセンブリに ComVisibleAttribute を設定します |
|
属性を AttributeUsageAttribute に設定します |
|
属性引数にアクセサーを定義します |
|
インデクサーを多次元にすることはできません |
|
適切な場所にプロパティを使用します |
|
反復する引数を params 配列で置き換えます |
|
既定パラメーターを使用することはできません |
|
enums を FlagsAttribute に設定します |
|
列挙ストレージは Int32 でなければなりません |
|
適切な場所にイベントを使用します |
|
一般的な例外の種類はキャッチしません |
|
標準例外コンストラクターを実装します |
|
入れ子にされた型を参照可能にすることはできません |
|
ICollection の実装は、厳密に型指定されたメンバーを含んでいます |
|
比較可能な型でメソッドをオーバーライドします |
|
列挙子は厳密に型指定されていなければなりません |
|
リストは厳密に型指定されています |
|
ObsoleteAttribute メッセージを指定します |
|
インデクサーには整数または文字列引数を使用します |
|
プロパティを書き込み専用にすることはできません |
|
参照型で、演算子 equals をオーバーロードしないでください |
|
Sealed 型の保護されたメンバーを宣言しません |
|
Sealed 型の仮想メンバーを宣言しません |
|
名前空間で型を宣言します |
|
参照可能なインスタンス フィールドを宣言しません |
|
スタティック ホルダー型はシールされていなければなりません |
|
スタティック ホルダー型はコンストラクターを含むことはできません |
|
URI パラメーターを文字列にすることはできません |
|
URI 戻り値を文字列にすることはできません |
|
URI プロパティを文字列にすることはできません |
|
文字列 URI オーバーロードが、System.Uri オーバーロードを呼び出します |
|
型は、一定の基本型を拡張することはできません |
|
メンバーは特定の具象型を公開しないでください。 |
|
例外は public として設定する必要があります |
|
変数名はフィールド名と同一にすることはできません |
|
メソッドの実装を複雑にしすぎないでください |
|
識別子は、大文字と小文字の区別以外にも相違していなければなりません |
|
識別子はキーワードと同一にすることはできません |
|
使用されていないパラメーターの確認 |
|
使用されていないローカルを削除します |
|
ローカルを使用しすぎないでください |
|
参照型の静的フィールドをインラインで初期化します |
|
呼び出されていないプライベート コードを使用しません |
|
インスタンス化されていない内部クラスを使用しません |
|
シールされていない属性を使用しません |
|
複数次元の配列ではなくジャグ配列を使用します |
|
equals および operator equals を値型でオーバーライドします |
|
プロパティは、配列を返すことはできません。 |
|
文字列の長さを使用して空の文字列をテストします |
|
メンバーを static に設定します |
|
使用されていないプライベート フィールドを使用しません |
|
予約された例外の種類を発生させません |
|
Win32 API に相当するマネージ API を使用します |
|
引数の例外を正しくインスタンス化します |
|
非定数フィールドは表示されません |
|
enums を FlagsAttribute に設定しません |
|
exception 句に例外を発生させないでください |
|
ファイナライザーは保護されなければなりません |
|
継承されたメンバーの参照範囲を縮小しません |
|
メンバーは、戻り値の型以外にも異なる点がなければなりません |
|
演算子の Equals のオーバーロードのオーバーライドである |
|
演算子オーバーロードには名前付けされた代替が存在します |
|
演算子は対称型オーバーロードを含まなければなりません |
|
Collection プロパティは読み取り専用でなければなりません |
|
可変引数に対して param を使用します |
|
文字列の代わりに System.Uri オブジェクトを渡します |
|
省略可能なフィールドに、逆シリアル化メソッドを指定します |
|
型をほとんど含まない名前空間を使用しません |
|
out パラメーターを使用しません |
|
空のインターフェイスは使用しません |
|
型を参照によって渡しません |
|
パブリック メソッドの引数の検証 |
|
継承を使用しすぎないでください |
|
紛らわしいフィールド名を確認します |
|
メンテナンスできないコードを使用しないでください。 |
|
クラス結合度を大きくしすぎないでください。 |
|
enum 値に 'Reserved' という名前を指定しません |
|
リソース文字列の複合語は、大文字と小文字を正しく区別しなければなりません |
|
複合語では、大文字と小文字が正しく区別されなければなりません |
|
リソース文字列は正しく入力されなければなりません |
|
識別子は正しく入力されなければなりません。 |
|
識別子はアンダースコアを含むことはできません |
|
識別子では、大文字と小文字が正しく区別されなければなりません |
|
識別子は、正しいサフィックスを含んでいなければなりません |
|
識別子は、不適切なサフィックスを含むことはできません |
|
enum 値を型名のプレフィックスにしません |
|
イベントは、before または after プレフィックスを含むことはできません |
|
フラグ列挙は、複数形の名前を含んでいなければなりません |
|
識別子は正しいプレフィックスを含んでいなければなりません |
|
FlagsAttribute 列挙のみが複数形の名前を含んでいなければなりません |
|
パラメーター名はメンバー名と同一にすることはできません |
|
識別子には型名を含めないでください |
|
プロパティ名は get メソッドと同一にすることはできません |
|
識別子は不適切なプレフィックスを含むことはできません。 |
|
型名は名前空間と同一にすることはできません |
|
パラメーター名は基本宣言と同一でなければなりません |
|
適切な用語を使用します |
|
リテラルに正しいスペルを要求 |