微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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关于你的情况.您可能还想检查它.

原文地址:https://www.jb51.cc/csharp/98430.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐