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

前端之家收集整理的这篇文章主要介绍了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关于你的情况.您可能还想检查它.

猜你在找的C#相关文章