我对理解一些C#代码有疑问:)
我有一个2接口IClassB和IClass,每个接口都有一个方法,无论名称和名称是什么。签名。我正在做类ClassC,它实现了它们:IClassB显式和IClassA隐式。所以我有代码:
public class ClassC: IClassA, IClassB
{
void IClassB.methodForClassB()
{
Console.WriteLine("method for explicit implementation");
}
public void methodForClassA()
{
Console.WriteLine("method for implicit implementation");
}
}
如您所见:method void IClassB.methodForClassB()是私有的(不是吗?)。 但是当我使用这个ClassC对象时,我可以调用方法methodForClassB,因为它将是一个公共方法。怎么解释呢?
ClassC classC = new ClassC();
IClassB classB = new ClassC();
classB.methodForClassB();*
((IClassB)classC).methodForClassB();
答案 0 :(得分:2)
参考The C# Language Specification, 13.4.1 Explicit interface member implementations
显式接口成员实现包含访问修饰符是编译时错误,包含修饰符abstract,virtual,override或static是编译时错误。
此类方法必须通过对接口的引用进行访问,并且它们具有与接口本身相同的访问级别(public
或internal
)。