ReSharper 2025.2 Help

代码检查:通过派生类型访问类型的静态成员

此错误出现在通过派生类型访问类型的静态成员的代码中。 例如:

class A { public static int N; } class B : A { } static void Main(string [] args) { B.N = 3; // warning here }

上述代码导致了错误的认知,认为字段 N 属于类型 B ,而实际上并非如此。 此外,如果类型 AB 在不同的程序集内引入,那么 Main() 方法会引入对 B 程序集的不必要依赖,而这种依赖本可以避免。

调用工厂方法可能会引发更令人困惑的情况。 如果您使用 var 定义一个变量,您得到的类型可能不是您所期望的。 例如,

var request = HttpWebRequest.Create("http://someplace.com");

上述代码表明 Create() 操作的结果是 HttpWebRequest 类型的对象,而实际上并非如此——结果是 WebRequest 类型,最好写成如下形式:

var request = WebRequest.Create("http://someplace.com");

此外,C# 编译器使用声明类型创建对方法的调用,因此在 IL 中实际上是对基类型的调用。 如果您稍后在派生类型中添加了具有 new 修饰符和相同签名的方法,代码行为不会改变,除非重新编译。

最后修改日期: 2025年 9月 27日