--- 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 で例外をスローするのは避ける |