次の方法で共有


設計規則

設計規則は、.NET Framework の設計ガイドラインへの準拠をサポートします。

このセクションの内容

ルール 説明
CA1000: ジェネリック型の静的メンバーを宣言しないでください ジェネリック型の静的メンバーを呼び出す場合は、型引数を型に指定する必要があります。 推論をサポートしていないジェネリック インスタンス メンバーを呼び出す場合は、メンバーに対して型引数を指定する必要があります。 この 2 つのケースでは、型引数を指定するための構文が異なり、混同しやすくなります。
CA1001: 破棄可能なフィールドを所有する型は、破棄可能にする必要があります クラスは System.IDisposable 型であるインスタンス フィールドを宣言して実装します。このクラスは IDisposable を実装しません。 IDisposable フィールドを宣言するクラスは、アンマネージ リソースを間接的に所有し、IDisposable インターフェイスを実装する必要があります。
CA1002: 汎用リストを公開しない System.Collections.Generic.List<(Of <(T>)>) は、継承ではなくパフォーマンスのために設計された汎用コレクションです。 したがって、List には仮想メンバーは含まれません。 代わりに、継承用に設計されたジェネリック コレクションを公開する必要があります。
CA1003: 汎用イベント ハンドラー インスタンスを使用 型には void を返すデリゲートが含まれており、そのシグネチャには 2 つのパラメーター (1 つ目のオブジェクトと EventArgs に割り当て可能な型) が含まれており、含まれているアセンブリは .NET Framework 2.0 を対象としています。
CA1005: ジェネリック型の で過剰なパラメーターを回避する ジェネリック型に含まれる型パラメーターが多いほど、各型パラメーターが何を表しているかを知って覚えるのが難しくなります。 通常は、List<T>のように 1 つの型パラメーターで、また、Dictionary<TKey、TValue>のように、2 つの型パラメーターを持つ場合があります。 ただし、2 つ以上の型パラメーターが存在する場合、ほとんどのユーザーにとって難易度が大きすぎます。
CA1008: 列挙内にゼロ値が必要です 初期化されていない列挙型の既定値は、他の値型と同様に 0 です。 フラグのない属性付き列挙型では、既定値が列挙型の有効な値になるように、0 の値を使用してメンバーを定義する必要があります。 FlagsAttribute 属性が適用された列挙体で値が 0 のメンバーが定義されている場合、その名前は "None" にして、列挙型に値が設定されていないことを示す必要があります。
CA1010: コレクションは汎用インターフェイス を実装する必要があります コレクションの使いやすさを広げるには、ジェネリック コレクション インターフェイスのいずれかを実装します。 その後、コレクションを使用して、ジェネリック コレクション型を設定できます。
CA1012: 抽象型にはパブリック コンストラクタがないこと 抽象型のコンストラクターは、派生型によってのみ呼び出すことができます。 パブリック コンストラクターは型のインスタンスを作成し、抽象型のインスタンスを作成できないため、パブリック コンストラクターを持つ抽象型は誤って設計されています。
CA1014: CLSCompliantAttribute でアセンブリをマークする 共通言語仕様 (CLS) は、アセンブリが複数のプログラミング言語で使用される場合に、アセンブリが準拠する必要がある名前付け制限、データ型、および規則を定義します。 適切な設計では、CLSCompliantAttribute を使用して、すべてのアセンブリが CLS コンプライアンスを明示的に示します。 この属性がアセンブリに存在しない場合、アセンブリは準拠していません。
CA1016: アセンブリを AssemblyVersionAttribute でマークする .NET では、バージョン番号を使用してアセンブリを一意に識別し、厳密な名前のアセンブリ内の型にバインドします。 バージョン番号は、バージョンと発行元ポリシーと共に使用されます。 既定では、アプリケーションはビルドされたアセンブリ バージョンでのみ実行されます。
CA1017: アセンブリを ComVisibleAttribute でマークする ComVisibleAttribute は、COM クライアントがマネージド コードにアクセスする方法を決定します。 適切な設計は、アセンブリが COM の可視性を明示的に示すように指定します。 アセンブリ全体に対してCOMの可視性を設定した後、個々の型や型メンバーに対してこれをオーバーライドできます。 この属性が存在しない場合、アセンブリの内容は COM クライアントに表示されます。
CA1018: AttributeUsageAttribute で属性をマークする カスタム属性を定義する場合は、AttributeUsageAttribute を使用して、カスタム属性を適用できるソース コード内の場所を示してマークします。 属性の意味と使用方法によって、コード内の有効な場所が決まります。
CA1019: 属性引数のアクセサーを定義 属性は、ターゲットに属性を適用するときに指定する必要がある必須の引数を定義できます。 これらは位置引数とも呼ばれます。これは、位置パラメーターとして属性コンストラクターに渡されるためです。 必須の引数ごとに、属性は、実行時に引数の値を取得できるように、対応する読み取り専用プロパティも提供する必要があります。 属性では、省略可能な引数 (名前付き引数とも呼ばれます) を定義することもできます。 これらの引数は、名前によって属性コンストラクターに提供され、対応する読み取り/書き込みプロパティが必要です。
CA1021: out パラメーターを使用しません 参照で型を渡す (out または ref を使用する) には、ポインターの経験、値型と参照型の違い、および複数の戻り値を持つメソッドの処理が必要です。 また、out パラメーターと ref パラメーターの違いは広く理解されていません。
CA1024: 適切な場合にプロパティを使用する パブリック メソッドまたはプロテクト メソッドには、"Get" で始まり、パラメーターを受け取らず、配列ではない値を返す名前があります。 このメソッドは、プロパティに変更できる可能性があります。
CA1027: FlagsAttribute で列挙値をマークします 列挙型は、関連する名前付き定数のセットを定義する値型です。 名前付き定数を意味のある方法で組み合わせることができる場合は、FlagsAttribute を列挙型に適用します。
CA1028: Enum Storage は Int32 にする必要があります 列挙型は、関連する名前付き定数のセットを定義する値型です。 既定では、System.Int32 データ型を使用して定数値が格納されます。 この基になる型を変更することはできますが、ほとんどのシナリオでは必須または推奨されません。
CA1030: 適切な場所でイベントを使用する このルールは、通常はイベントに使用される名前を持つメソッドを検出します。 明確に定義された状態の変更に応答してメソッドを呼び出す場合は、イベント ハンドラーによってメソッドを呼び出す必要があります。 メソッドを呼び出すオブジェクトは、メソッドを直接呼び出す代わりにイベントを発生させる必要があります。
CA1031: 一般的な例外の種類 をキャッチしない 汎用的な例外はキャッチしないでください。 より具体的な例外をキャッチするか、汎用的な例外を catch ブロックの最後のステートメントでスローし直します。
CA1032: 標準の例外コンストラクターを実装 コンストラクターの完全なセットを指定しないと、例外を正しく処理することが困難になる可能性があります。
CA1033: インターフェイス メソッドは子型によって呼び出されることができるべきです 封印されていない外部から参照可能な型は、パブリック インターフェイスの明示的なメソッド実装を提供し、同じ名前を持つ外部から参照可能な別のメソッドを提供しません。
CA1034: 入れ子型は公開してはいけません 入れ子になった型は、別の型のスコープで宣言される型です。 入れ子になった型は、包含型のプライベート実装の詳細をカプセル化するのに役立ちます。 この目的で使用される入れ子になった型は、外部から参照することはできません。
CA1036: 比較可能な型でメソッドをオーバーライドします パブリック型または保護された型は、System.IComparable インターフェイスを実装します。 Object.Equals をオーバーライドしたり、等しい、等しくない、より小さい、または大きいかどうかを言語固有の演算子にオーバーロードしたりすることはありません。
CA1040: 空のインターフェイス を回避する インターフェイスは、動作または使用コントラクトを提供するメンバーを定義します。 インターフェイスによって記述される機能は、継承階層のどこに型が表示されているかに関係なく、任意の型で採用できます。 型は、インターフェイスのメンバーの実装を提供することによってインターフェイスを実装します。 空のインターフェイスでは、メンバーは定義されません。そのため、実装できるコントラクトは定義されません。
CA1041: ObsoleteAttribute メッセージ を表示する 型またはメンバーは、ObsoleteAttribute.Message プロパティが指定されていない System.ObsoleteAttribute 属性を使用してマークされます。 ObsoleteAttribute を使用してマークされた型またはメンバーがコンパイルされると、属性の Message プロパティが表示され、古い型またはメンバーに関するユーザー情報が提供されます。
CA1043: インデクサーの に整数または文字列引数を使用する インデクサー (インデックス付きプロパティ) では、インデックスに整数型または文字列型を使用する必要があります。 これらの型は通常、データ構造のインデックス作成に使用され、ライブラリの使いやすさが向上します。 Object 型の使用は、デザイン時に特定の整数型または文字列型を指定できない場合に制限する必要があります。
CA1044: プロパティは のみを書き込むべきではありません 読み取り専用プロパティを持つことは許容され、多くの場合必要ですが、設計ガイドラインでは書き込み専用プロパティの使用が禁止されています。 これは、ユーザーが値を設定し、その値をユーザーが表示できないようにしても、セキュリティが提供されないためです。 また、読み取りアクセスがないと、共有オブジェクトの状態を表示できないため、その有用性が制限されます。
CA1045: 参照で型を渡さないでください 参照で型を渡す (out または ref を使用する) には、ポインターの経験、値型と参照型の違い、および複数の戻り値を持つメソッドの処理が必要です。 一般ユーザー向けに設計するライブラリ アーキテクトは、ユーザーが out パラメーターまたは ref パラメーターの操作に習熟することを期待しないでください。
CA1046: 参照型で等しい演算子をオーバーロードしません 参照型の場合、等値演算子の既定の実装はほぼ常に正しいです。 既定では、2 つの参照は、同じオブジェクトを指している場合にのみ等しくなります。
CA1047: シール型で保護されたメンバーを宣言しないでください 型は、継承する型がメンバーにアクセスしたりオーバーライドしたりできるように、保護されたメンバーを宣言します。 定義上、シール型は継承できません。つまり、シール型の保護されたメソッドを呼び出すことはできません。
CA1050: 名前空間の型を宣言 型は、名前の競合を防ぐために、およびオブジェクト階層内の関連する型を整理する方法として、名前空間で宣言されます。
CA1051: 表示されるインスタンス フィールドを宣言しません フィールドの主な用途は、実装の詳細として行う必要があります。 フィールドはプライベートまたは内部である必要があり、プロパティを使用して公開する必要があります。
CA1052: スタティック ホルダー型はシールされていなければなりません パブリック型または保護された型には静的メンバーのみが含まれており、sealed (C#) 修飾子または NotInheritable (Visual Basic) 修飾子を使用して宣言されません。 継承されない型は、基本型として使用されないように、シール修飾子を使用してマークする必要があります。
CA1053: 静的ホルダー型にはコンストラクターがあってはならない パブリック型または入れ子になったパブリック型は、静的メンバーのみを宣言し、パブリックまたは保護された既定のコンストラクターを持ちます。 静的メンバーを呼び出しても型のインスタンスは必要ないため、コンストラクターは不要です。 文字列オーバーロードでは、安全性とセキュリティのために文字列引数を使用して、URI (Uniform Resource Identifier) オーバーロードを呼び出す必要があります。
CA1054: URI パラメーターを文字列にすることはできません メソッドが URI の文字列表現を受け取る場合は、URI クラスのインスタンスを受け取る対応するオーバーロードを指定する必要があります。これにより、これらのサービスは安全かつ安全な方法で提供されます。
CA1055: URI の戻り値を文字列にすることはできません この規則では、メソッドが URI を返すものとします。 URI の文字列表現は解析エラーやエンコード エラーが発生しやすく、セキュリティの脆弱性につながる可能性があります。 System.Uri クラスは、これらのサービスを安全かつ安全な方法で提供します。
CA1056: URI プロパティを文字列にすることはできません この規則では、プロパティが URI を表していることを前提としています。 URI の文字列表現は解析エラーやエンコード エラーが発生しやすく、セキュリティの脆弱性につながる可能性があります。 System.Uri クラスは、これらのサービスを安全かつ安全な方法で提供します。
CA1058: 型は、一定の基本型を拡張することはできません 外部から参照できる型は、特定の基本型を拡張します。 代替手段の 1 つを使用します。
CA1060: P/Invokes を NativeMethods クラスに移動 プラットフォーム呼び出しメソッド (System.Runtime.InteropServices.DllImportAttribute でマークされているメソッドや、Visual Basic で Declare キーワードを使用して定義されたメソッドなど) は、アンマネージ コードにアクセスします。 これらのメソッドは、NativeMethods、SafeNativeMethods、または UnsafeNativeMethods クラスである必要があります。
CA1061: 基底クラスのメソッドを非表示にしない 基本型のメソッドは、派生型において同じ名前のメソッドがある場合に非表示になります。ただし、その派生メソッドのパラメーター シグネチャは、基本メソッドのパラメーター シグネチャの対応する型と比べて、より弱く派生されたタイプによってのみ異なります。
CA1062: パブリック メソッドの引数を検証 外部から参照可能なメソッドに渡されるすべての参照引数は、null に対してチェックする必要があります。
CA1063: IDisposable を正しく実装 すべての IDisposable 型は、Dispose パターンを正しく実装する必要があります。
CA1064: 例外はパブリック にする必要があります 内部例外は、独自の内部スコープ内でのみ表示されます。 例外が内部スコープの範囲外になると、基本例外のみを使用して例外をキャッチできます。 内部例外が System.ExceptionSystem.SystemException、または System.ApplicationExceptionから継承されている場合、外部コードには、例外の対処方法を知るために十分な情報がありません。
CA1065: 予期しない場所で例外を発生させないでください 例外をスローしないはずのメソッドが例外をスローします。
CA1066: Equals をオーバーライドするときに IEquatable を実装する 値型は Equals メソッドをオーバーライドしますが、IEquatable<T>を実装しません。
IEquatable を実装するときに Equals をオーバーライドします 型は IEquatable<T>を実装しますが、Equals メソッドをオーバーライドしません。
CA1068: CancellationToken パラメーターは最後に指定する必要があります メソッドには、最後のパラメーターではない CancellationToken パラメーターがあります。
CA1069: 列挙型には重複する値を指定できません 列挙体には、同じ定数値が明示的に割り当てられている複数のメンバーがあります。
CA1070: イベント フィールドを仮想 として宣言しない フィールドに似たイベント が仮想として宣言されました。