相关疑难解决方法(0)

为什么C#编译器重载解析算法将具有相同签名的静态和实例成员视为相等?

让我们有两个成员相同的签名,但一个是静态的而另一个是 - 不是:

class Foo
{
    public void Test() { Console.WriteLine("instance"); }

    public static void Test() { Console.WriteLine("static"); }
}
Run Code Online (Sandbox Code Playgroud)

但是这样的代码生成会带来编译错误:

类型'Foo'已经定义了一个名为'Test'的成员,它具有相同的参数类型

但为什么?

让我们成功编译,然后:

  • Foo.Test() 应输出"静态"

  • new Foo().Test();应该输出"实例"

无法调用静态成员而不是实例1,因为在这种情况下会出现另一个更合理的编译器错误:

无法使用实例引用访问成员'Foo.Test()'; 用类型名称来限定它

.net c# static-members overload-resolution

14
推荐指数
1
解决办法
451
查看次数

标签 统计

.net ×1

c# ×1

overload-resolution ×1

static-members ×1