为什么显式实现接口不能公开?

时间:2009-08-10 05:46:47

标签: c# interface

我在Class中实现了Interface的实现。当我做它显式实现我得到编译器错误

The modifier 'public' is not valid for this item

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

2 个答案:

答案 0 :(得分:65)

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

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

(微软有一个overview on explicit interface implementation

答案 1 :(得分:27)

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

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

为什么显式实现接口不能公开? 当一个成员被显式实现时,它不能通过类实例访问,而只能通过接口的实例访问。

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();
.....

无法通过类或结构实例访问Explict接口成员实现。