加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:24:25 所属栏目:百科 来源:网络整理
导读:C#在函数重载时提供以下 signature characteristics. 我们知道,重载只考虑参数;它们的数量和类型,但多态性的目标是根据调用策略提供相同的名称但不同的用法. 如果我有一个包含两个具有相同名称和签名的方法的类,而一个是静态而另一个不是,则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关于你的情况.您可能还想检查它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读