我在Class中有实现接口的方法。当我实现显式实现时,出现编译器错误
The modifier 'public' is not valid for this item
为什么不允许public
显式接口实现?
我在Class中有实现接口的方法。当我实现显式实现时,出现编译器错误
The modifier 'public' is not valid for this item
为什么不允许public
显式接口实现?
Answers:
显式接口实现的原因是避免名称冲突,最终结果是在调用这些方法之前必须将对象显式转换为该接口。
您可以认为这些方法不是在类上公开的,而是直接与接口绑定的。没有必要指定public / private / protected,因为接口不能具有非public成员,所以它将始终是public。
(Microsoft概述了显式接口的实现)
"...since it will always be public..."
; 从技术上讲这是不正确的,因为在将对象强制转换为接口之前,无法从外部调用显式实现的函数。
"Explicit interface member implementations have different accessibility characteristics than other members. Because explicit interface member implementations are never accessible through their fully qualified name in a method invocation or a property access, they are in a sense private. However, since they can be accessed through an interface instance, they are in a sense also public."
显式成员实现允许对具有相同签名的接口成员进行歧义消除。
如果没有显式的接口成员实现,则类或结构将不可能具有具有相同签名和返回类型的接口成员的不同实现。
为什么接口的显式实现不能公开?当成员被显式实现时,不能通过类实例进行访问,而只能通过接口的实例进行访问。
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();
.....
显式接口成员的实现不能通过类或结构实例进行访问。