显式接口派生:可作为公共接口访问的私有方法

时间:2015-06-24 20:24:27

标签: c#

我对理解一些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();

1 个答案:

答案 0 :(得分:2)

参考The C# Language Specification, 13.4.1 Explicit interface member implementations

  

显式接口成员实现包含访问修饰符是编译时错误,包含修饰符abstract,virtual,override或static是编译时错误。

此类方法必须通过对接口的引用进行访问,并且它们具有与接口本身相同的访问级别(publicinternal)。