| --- Active Static Analysis Rules --- |
| すべてのルール[I=85 PV=10 V=42 PSV=17 SV=60/active=214] |
| 組み込みルール[I=85 PV=10 V=42 PSV=17 SV=60/active=214] |
| .NET Framework デザイン ガイドライン[I=85 PV=10 V=42 PSV=17 SV=60/active=214] |
| 名前付けのガイドライン[I=84 PV=2 V=29 PSV=1 SV=5/active=121] |
| 大文字と小文字の区別[I=0 PV=0 V=5 PSV=0 SV=0/active=5] |
| * V: 大文字と小文字を区別しない名前空間 |
| * V: 大文字と小文字を区別しないパラメータ名 |
| * V: 大文字と小文字を区別しない型名 |
| * V: 文字と小文字を区別しないプロパティ名 |
| * V: 大文字と小文字を区別しないメソッド名 |
| 大文字の使用のスタイル[I=28 PV=0 V=0 PSV=0 SV=0/active=28] |
| * I: クラス名には Pascal 形式を使用する |
| * I: 列挙型の名前には Pascal 形式を使用する |
| * I: 列挙型の値の名前には Pascal 形式を使用する |
| * I: イベント名には Pascal 形式を使用する |
| * I: 例外クラス名には Pascal 形式を使用する |
| * I: read-only の静的フィールド名には Pascal 形式を使用する |
| * I: インターフェイス名には Pascal 形式を使用する |
| * I: メソッド名には Pascal 形式を使用する |
| * I: 名前空間の名前には Pascal 形式を使用する |
| * I: プロパティ名には Pascal 形式を使用する |
| * I: public インスタンス フィールド名には Pascal 形式を使用する |
| * I: デリゲート型名には Pascal 形式を使用する |
| * I: 構造体名には Pascal 形式を使用する |
| * I: パラメータ名には Camel 形式を使用する |
| * I: protected インスタンス フィールド名には Camel 形式を使用する |
| * I: クラス名には大文字を使用する |
| * I: 列挙型名には大文字を使用する |
| * I: 列挙型の値名には大文字を使用する |
| * I: イベント名には大文字を使用する |
| * I: 例外クラス名には大文字を使用する |
| * I: read-only の静的フィールド名には大文字を使用する |
| * I: インターフェイス名には大文字を使用する |
| * I: メソッド名には大文字を使用する |
| * I: 名前空間の名前には大文字を使用する |
| * I: プロパティ名には大文字を使用する |
| * I: public インスタンス フィールド名には大文字を使用する |
| * I: デリゲート型名には大文字を使用する |
| * I: 構造体名には大文字を使用する |
| 単語の選択[I=0 PV=0 V=16 PSV=0 SV=0/active=16] |
| * V: クラスに対する .NET 共通名の使用は避ける |
| * V: 構造体に .NET 共通名を使うのは避ける |
| * V: インターフェイスに .NET 共通名を使うのは避ける |
| * V: 列挙に .NET 共通名を使うのは避ける |
| * V: デリゲートに .NET 共通名を使うのは避ける |
| * V: キーワードと競合するクラス名は避ける |
| * V: キーワードと競合するデリゲート名は避ける |
| * V: キーワードと競合する列挙名は避ける |
| * V: キーワードと競合するインターフェイス名は避ける |
| * V: キーワードと競合する構造体名は避ける |
| * V: キーワードと競合する名前空間名は避ける |
| * V: キーワードと競合するメソッド名は避ける |
| * V: キーワードと競合するパラメータ名は避ける |
| * V: キーワードと競合するフィールド名は避ける |
| * V: キーワードと競合するプロパティ名は避ける |
| * V: キーワードと競合するイベント名は避ける |
| 略語[I=33 PV=0 V=0 PSV=0 SV=0/active=33] |
| * I: イベント名に略語を使うのは避ける |
| * I: フィールド名に略語を使うのは避ける |
| * I: メソッド名に略語を使うのは避ける |
| * I: 名前空間の名前に略語を使うのは避ける |
| * I: パラメータ名に略語を使うのは避ける |
| * I: プロパティ名に略語を使うのは避ける |
| * I: クラス名に略語を使うのは避ける |
| * I: デリゲート名に略語を使うのは避ける |
| * I: 列挙名に略語を使うのは避ける |
| * I: インターフェイス名に略語を使うのは避ける |
| * I: 構造体名に略語を使うのは避ける |
| * I: よく知られた頭字語をクラス名で使用する |
| * I: 有名な頭字語をデリゲート名で使用する |
| * I: 有名な頭字語を列挙名で使用する |
| * I: 有名な頭字語をイベント名で使用する |
| * I: 有名な頭字語をフィールド名で使用する |
| * I: 有名な頭字語をインターフェイス名で使用する |
| * I: 有名な頭字語をメソッド名で使用する |
| * I: 有名な頭字語を名前空間の名前で使用する |
| * I: 有名な頭字語をパラメータ名で使用する |
| * I: 有名な頭字語をプロパティ名で使用する |
| * I: 有名な頭字語を構造体名で使用する |
| * I: クラス名ではあいまいな頭字語を避ける |
| * I: デリゲート名ではあいまいな頭字語を避ける |
| * I: 列挙名ではあいまいな頭字語を避ける |
| * I: イベント名ではあいまいな頭字語を避ける |
| * I: フィールド名ではあいまいな頭字語を避ける |
| * I: インターフェイス名ではあいまいな頭字語を避ける |
| * I: メソッド名ではあいまいな頭字語を避ける |
| * I: 名前空間の名前ではあいまいな頭字語を避ける |
| * I: パラメータ名ではあいまいな頭字語を避ける |
| * I: プロパティ名ではあいまいな頭字語を避ける |
| * I: 構造体名ではあいまいな頭字語を避ける |
| 型名の混乱の回避[I=13 PV=0 V=0 PSV=0 SV=0/active=13] |
| * I: 言語特有の名前をパラメータ名に使用しない |
| * I: 言語特有の名前をメンバ名に使用しない |
| * I: クラスでは一般的な名前を使用する |
| * I: デリゲートでは一般的な名前を使用する |
| * I: 列挙では一般的な名前を使用する |
| * I: イベントでは一般的な名前を使用する |
| * I: フィールドでは一般的な名前を使用する |
| * I: インターフェイスでは一般的な名前を使用する |
| * I: メソッドでは一般的な名前を使用する |
| * I: 名前空間では一般的な名前を使用する |
| * I: パラメータでは一般的な名前を使用する |
| * I: プロパティでは一般的な名前を使用する |
| * I: 構造体では一般的な名前を使用する |
| 名前空間の名前付け[I=0 PV=0 V=1 PSV=1 SV=0/active=2] |
| * V: クラスと名前空間の名前の競合 |
| * PSV: ネストされた名前空間は、その元の名前空間の型に依存するべきである |
| クラスの名前付け[I=3 PV=0 V=2 PSV=0 SV=0/active=5] |
| * I: 'C' で開始するクラス名は避ける |
| * I: クラス名ではアンダースコアを避ける |
| * I: 'I' で開始するクラス名は避ける |
| * V: 例外クラスは 'Exception' で終了すべきである |
| * V: コレクション クラスは 'Collection' で終わるべきである |
| インターフェイスの名前付け[I=1 PV=0 V=1 PSV=0 SV=0/active=2] |
| * V: インターフェイス名は 'I' で開始する' |
| * I: インターフェイス名ではアンダースコアの使用を避ける |
| 属性の名前付け[I=0 PV=0 V=1 PSV=0 SV=0/active=1] |
| * V: 属性クラス名は 'Attribute' で終わるべきである |
| 列挙型の名前付け[I=3 PV=0 V=0 PSV=0 SV=1/active=4] |
| * I: 列挙の最後には 'Enum' をつけない |
| * I: ビット フィールドではない列挙には単数系の名前を使用する |
| * I: ビット フィールドの列挙には複数形の名前を使用する |
| * SV: ビット フィールドの列挙には Flags 属性を使用する |
| 静的フィールドの名前付け[I=1 PV=0 V=0 PSV=0 SV=1/active=2] |
| * I: 静的フィールドではハンガリー表記を避ける |
| * SV: public static フィールドではなく static プロパティを使用する |
| パラメータの名前付け[I=1 PV=0 V=1 PSV=0 SV=0/active=2] |
| * I: パラメータではハンガリー表記法を避ける |
| * V: 記述的なパラメータ名を使用する |
| プロパティの名前付け[I=1 PV=1 V=0 PSV=0 SV=0/active=2] |
| * I: プロパティにハンガリー表記法を使用するのは避ける |
| * PV: 型の名前と競合するプロパティ名 |
| イベントの名前付け[I=0 PV=1 V=2 PSV=0 SV=3/active=6] |
| * V: イベント ハンドラ名は 'EventHandler' で終わるべきである |
| * V: EventArgs クラスは 'EventArgs' で終わるべきである |
| * SV: イベント ハンドラの適切なパラメータ |
| * SV: Before/After 命名パターンの使用は避ける |
| * PV: 接頭辞つきのイベント名の使用は避ける |
| * SV: OnEvent メソッドを用意する |
| クラス メンバの使用のガイドライン[I=1 PV=6 V=4 PSV=4 SV=22/active=37] |
| プロパティの使用[I=0 PV=0 V=2 PSV=2 SV=7/active=11] |
| * SV: 型名と同じプロパティ名は避ける |
| * PSV: 関連するプロパティには ISupportInitialize を実装する |
| * SV: コンポーネントに PropertyChanged イベントを用意する |
| * SV: コンポーネントに RaisePropertyChanged メソッドを用意する |
| * SV: コンポーネントに PropertyChanging イベントを用意する |
| * V: プロパティ アクセサは避ける |
| * PSV: 副作用のある get アクセサは使用しない |
| * SV: 配列プロパティは避ける |
| * V: write-only プロパティの使用は避ける |
| * SV: インデックス付きプロパティは 1 つだけにする |
| * SV: インデクサの名前は 'Item' にする |
| イベントの使用[I=0 PV=2 V=1 PSV=0 SV=4/active=7] |
| * PV: イベントではハンガリー表記法を避ける |
| * SV: イベント ハンドラの戻り型に void を使用する |
| * PV: イベント クラスは EventArgs を継承する |
| * SV: イベントを public にする |
| * SV: イベント アクセサ名は 'add' と 'remove' にする |
| * V: 1 クラスあたりのイベント数が多すぎないようにする |
| * SV: イベント起動を try ブロックに入れる |
| メソッドの使用[I=1 PV=1 V=1 PSV=1 SV=3/active=7] |
| * PV: メソッドではハンガリー表記法を避ける |
| * SV: デフォルト引数は避ける |
| * SV: VarArgs 呼び出し規約は使用しない |
| * PSV: メソッド オーバーロードでは一貫した命名パターンを使用する |
| * I: たくさんのパラメータではなく 1 つの配列を使用する |
| * SV: もっとも完全なオーバーロードだけを virtual にする |
| * V: エレメント数の少ない param オーバーロードのための特別なコード パス |
| コンストラクタの使用[I=0 PV=1 V=0 PSV=0 SV=5/active=6] |
| * SV: 静的クラスに private コンストラクタを用意する |
| * SV: 処理の多いコンストラクタは避ける |
| * SV: protected コンストラクタを用意する |
| * SV: 空の構造体コンストラクタは避ける |
| * SV: プロパティに相当するコンストラクタ パラメータ |
| * PV: コンストラクタ オーバーロードには一貫した命名パターンを使用する |
| フィールドの使用[I=0 PV=2 V=0 PSV=1 SV=3/active=6] |
| * SV: public インスタンス フィールドは避ける |
| * SV: protected インスタンス フィールドは避ける |
| * SV: 定数プロパティは避ける |
| * PV: インスタンス フィールドではハンガリー表記法を避ける |
| * PV: 接頭辞のついたフィールドは避ける |
| * PSV: 定義済みのインスタンス フィールドは public static readonly にする |
| 型の使用のガイドライン[I=0 PV=0 V=3 PSV=3 SV=12/active=18] |
| 基本クラスの使用[I=0 PV=0 V=0 PSV=1 SV=2/active=3] |
| * SV: 抽象クラスの実装を用意する |
| * PSV: テンプレート メソッドを使用する |
| * SV: 抽象クラスで protected コンストラクタを定義する |
| Sealed クラスの使用[I=0 PV=0 V=0 PSV=1 SV=1/active=2] |
| * PSV: 継承の必要がない場合、sealed クラスを使用する |
| * SV: 静的クラスを sealed にする |
| 構造体の使用[I=0 PV=0 V=0 PSV=0 SV=2/active=2] |
| * SV: 大きな構造体は避ける |
| * SV: 構造体のデフォルト コンストラクタを用意しない |
| 列挙の使用[I=0 PV=0 V=1 PSV=0 SV=5/active=6] |
| * V: 静的定数ではなく列挙を使用する |
| * SV: Int32 列挙を使用する |
| * SV: 非整数の列挙は使用しない |
| * SV: 列挙でのメソッド宣言は避ける |
| * SV: 列挙でのプロパティ宣言は避ける |
| * SV: 列挙でのイベント定義は避ける |
| 属性の使用[I=0 PV=0 V=2 PSV=0 SV=2/active=4] |
| * SV: AttributeUsage を指定する |
| * V: Attribute クラスは sealed にすべきである |
| * SV: 同一の位置指定引数と名前付き引数は避ける |
| * V: 引数とプロパティ名を大文字・小文字で区別する |
| ネストされた型の使用[I=0 PV=0 V=0 PSV=1 SV=0/active=1] |
| * PSV: ネストされたクラスを外部で使用するのは避ける |
| COM のガイドライン[I=0 PV=0 V=1 PSV=4 SV=0/active=5] |
| * V: アセンブリで ComVisibleAttribute を指定する |
| * PSV: COM visible static メソッドは避ける |
| * PSV: COM visible パラメータ付きコンストラクタは避ける |
| * PSV: Disposable 型は参照でマーシャリングされる |
| * PSV: システム リソース型は参照でマーシャリングされる |
| エラーの発生と処理[I=0 PV=1 V=1 PSV=1 SV=1/active=4] |
| * SV: 例外では共通コンストラクタを実装する |
| * V: Exception クラスを継承してはいけない |
| * PSV: 例外では追加情報を避ける |
| * PV: 例外作成メソッドを使用する |
| 配列の使用のガイドライン[I=0 PV=0 V=0 PSV=1 SV=1/active=2] |
| * SV: コレクション以外のクラスではインデクサを避ける |
| * PSV: Collection は ICollection を実装すべきである |
| 演算子のオーバーロードの使用ガイドライン[I=0 PV=0 V=3 PSV=0 SV=10/active=13] |
| * SV: 演算子の代替シグニチャを用意する |
| * SV: 演算子は対称になるようにオーバーロードする |
| * SV: Equals の実装では GetHashCode も実装する |
| * SV: 演算子 == を実装するときは Equals も実装する |
| * SV: IComparable を実装するときは Equals も実装する |
| * V: IComparable を実装するときは比較演算子も実装する |
| * SV: Equals から例外をスローするのは避ける |
| * SV: GetHashCode から例外をスローするのは避ける |
| * SV: 等号演算子で例外をスローしない |
| * SV: 値型で == 演算子をオーバーロードする |
| * V: 値型で Equals を実装する |
| * SV: 参照型では等号演算子を避ける |
| * V: 加算と減算を実装するときは、== も実装する |
| 型キャストのガイドライン[I=0 PV=0 V=0 PSV=0 SV=2/active=2] |
| * SV: 分野が異なる型のキャストは避ける |
| * SV: 非明示的なキャストで例外を使用しない |
| 共通のデザイン パターン[I=0 PV=1 V=1 PSV=3 SV=7/active=12] |
| Finalize と Dispose の実装[I=0 PV=1 V=1 PSV=3 SV=7/active=12] |
| * PSV: システム リソース型では Finalize を実装する |
| * PSV: システム リソース型では IDisposable を実装する |
| * SV: IDisposable の実装では Finalize も実装する |
| * PV: Dispose メソッド名をカスタマイズする |
| * SV: Finalize の実装では IDisposable も実装する |
| * SV: public Finalize メソッドは避ける |
| * SV: Finalize を直接呼び出さない |
| * SV: base.Finalize メソッドを呼び出す |
| * V: 基本クラスで IDisposable を実装する |
| * PSV: Dispose の後に SupressFinalize を呼び出す |
| * SV: base.Dispose メソッドを呼び出す |
| * SV: Dispose で例外をスローするのは避ける |