c# – 为什么静态和非静态方法不能共享相同的签名?

C#在函数重载时提供以下 signature characteristics.

我们知道,重载只考虑参数;它们的数量和类型,但多态性的目标是根据调用策略提供相同的名称但不同的用法.

如果我有一个包含两个具有相同名称和签名的方法的类,而一个是静态而另一个不是,则C#编译器会抛出错误; “类已经定义了一个名为’foo’的成员,它具有相同的参数类型”.对这两种方法调用将会有所不同;一个具有对象名称,另一个具有类名称.因此,呼叫策略没有歧义.那为什么会抛出错误

class Example {

    public void foo() { }
    public static void foo() { }

}

class Program
{
    static void Main(string[] args)
    {

        Example e = new Example();
        e.foo(); 

    }
}

解决方法

它抛出错误的原因是可以从非静态方法调用静态方法而不指定类型名称.在这种情况下,编译器将无法确定调用哪个方法.
public class Foo()
{
   public static void MyMethod() {};
   public void MyMethod() {}

   public void SomeOtherMethod()
   {
      MyMethod(); // which method we're calling static or non-static ?
   }
}

编辑

刚刚发现这个SO post关于你的情况.您可能还想检查它.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...