我在类中有一个实现接口的方法。当我将其设置为显式实现时,我收到了编译器错误。
The modifier 'public' is not valid for this item
为什么显式接口实现不允许使用public
关键字?
显式接口实现的原因是为了避免名称冲突,结果是在调用这些方法之前必须将对象明确转换为该接口。
您可以将这些方法视为不公开于类的公共方法,而是直接与接口绑定。没有理由指定public/private/protected,因为它始终是公共的,因为接口不能有非公共成员。
(Microsoft提供了一份关于显式接口实现的概述)
显式成员实现允许消除接口成员中的歧义。
如果没有显式接口成员实现,一个类或结构体不可能拥有具有相同签名和返回类型的接口成员的不同实现。
为什么接口的显式实现不能是公共的? 当成员被显式实现时,它不能通过类实例访问,只能通过接口实例访问。
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();
.....
显式接口成员实现不能通过类或结构体的实例访问。