温馨提示:本文翻译自stackoverflow.com,查看原文请点击:c# - Why can't a static and non-static method share the same signature?
c# polymorphism

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

发布于 2020-03-27 15:52:20

C#提供以下签名特征,以在函数重载时使用。

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

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

 class Example {

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

}

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

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

    }
}

查看更多

查看更多

提问者
Yogesh lele
被浏览
18
2017-05-23 19:51

引发错误的原因是可以从非静态方法调用静态方法而无需指定类型名称。在这种情况下,编译器将无法确定正在调用哪个方法。

public class Foo()
{
   public static void MyMethod() {};
   public void MyMethod() {}

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

编辑

刚刚找到有关您的情况的这篇SO帖子您可能还需要检查它。