首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么接口的显式实现不能是公共的?

为什么接口的显式实现不能是公共的?
EN

Stack Overflow用户
提问于 2009-08-10 05:46:47
回答 2查看 20.9K关注 0票数 77

我在类中有方法,它是接口的实现。当我显式实现它时,我得到了编译器错误

代码语言:javascript
复制
The modifier 'public' is not valid for this item

为什么不允许显式接口实现使用public

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-10 05:51:35

显式接口实现的原因是为了避免名称冲突,最终结果是在调用这些方法之前必须显式地将对象强制转换为该接口。

您可以认为这些方法不是类上的公共方法,而是直接绑定到接口上。没有理由指定public/private/protected,因为它将始终是公共的,因为接口不能有非公共成员。

(微软有一个overview on explicit interface implementation)

票数 72
EN

Stack Overflow用户

发布于 2009-08-10 06:03:58

显式成员实现允许消除具有相同签名的接口成员的歧义。

如果没有显式的接口成员实现,类或结构就不可能拥有具有相同签名和返回类型的接口成员的不同实现。

为什么接口的显式实现不能是公共的?显式实现成员时,不能通过类实例访问该成员,只能通过接口的实例访问。

代码语言:javascript
复制
public interface IPrinter
{
   void Print();
}
public interface IScreen
{
   void Print();
}

public class Document : IScreen,IPrinter
{
    void IScreen.Print() { ...}
    void IPrinter.Print() { ...} 
}

.....
Document d=new Document();
IScreen i=d;
IPrinter p=d;
i.Print();
p.Print();
.....

显式接口成员实现不能通过类或结构实例访问。

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1253266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档