为什么以接口名为前缀的方法不能在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ruby – Capistrano 3部署无法连接到GitHub – 权限被拒绝(
- cocos2d-x win32平台嵌入浏览器—IWebBrowser2的使用
- reactjs – Webpack Hot Module Reloader不使用React State
- RegExp 随笔 JavaScript RegExp 对象
- SQLite简单案例相关资料JDBC
- c – 带整数的数组项的划分?
- [cocos2dx学习笔记]用cocos2dx3.X完成塔防游戏王国保卫战--
- c – 交叉编译到x86时的libboost-system链接器错误
- 第三十五讲:tapestry Ajax zone组件无黄色闪烁的背景
- 计算斐波那契(Fibonacci)