コードインスペクション: 派生型を介した型の静的メンバーへのアクセス
このエラーは、型から派生した型を介して型の静的メンバーにアクセスするコードで発生します。 たとえば、次のようになります。
class A
{
public static int N;
}
class B : A
{
}
static void Main(string [] args)
{
B.N = 3; // warning here
}
上記のコードは、フィールド N がタイプ B に属しているのに、そうではないという誤った認識を引き起こします。 さらに、型 A と B が異なるアセンブリに導入された場合、 Main() メソッドは B のアセンブリに不要な依存関係を導入することになりますが、これは回避できます。
ファクトリメソッドへの呼び出しによって、さらに混乱する状況が発生する可能性があります。 var で変数を定義すると、得られる型は期待通りではないかもしれません。 たとえば
var request = HttpWebRequest.Create("http://someplace.com");
上記のコードは、 Create() 操作の結果が HttpWebRequest 型のオブジェクトであることを示唆していますが、実際にはそうではありません。結果は WebRequest 型であり、次のように記述するのが最適です:
var request = WebRequest.Create("http://someplace.com");
また、C# コンパイラーは宣言型を使用してメソッドの呼び出しを作成するため、IL では実際には基本型の呼び出しになります。 後で new 修飾子と同じシグネチャーを持つメソッドを派生型に追加した場合、再コンパイルしない限りコードの動作は変わりません。
2026 年 6 月 12 日