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

为什么以接口名为前缀的方法不能在C#中编译?

发布时间:2020-12-15 18:02:54 所属栏目:百科 来源:网络整理
导读:以下为什么不编译? interface IFoo{void Foo();}class FooClass : IFoo{void IFoo.Foo() { return; }void Another() { Foo(); // ERROR }} 编译器抱怨“当前上下文中不存在名称’FooMethod’”. 但是,如果将Foo方法更改为: public void Foo() { return; }
以下为什么不编译?
interface IFoo
{
void Foo();
}

class FooClass : IFoo
{
void IFoo.Foo() { return; }

void Another() {
   Foo();  // ERROR
 }
}

编译器抱怨“当前上下文中不存在名称’FooMethod’”.

但是,如果将Foo方法更改为:

public void Foo() { return; }

编译得很好.

我不明白为什么一个有效,另一个没有.

解决方法

因为当您“显式实现”接口时,您只能通过强制转换为接口类型来访问该方法.隐式转换将找不到该方法.
void Another()
{
   IFoo f = (IFoo)this:
   f.Foo();
}

进一步阅读:

C# Interfaces. Implicit implementation versus Explicit implementation

(编辑:李大同)

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

    推荐文章
      热点阅读