【问题标题】:Explicit interface derivation: private method accessible as public one显式接口派生:可作为公共方法访问的私有方法
【发布时间】:2015-06-24 20:24:27
【问题描述】:

我在理解一些 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");
        }
    }

如您所见:方法 void IClassB.methodForClassB() 是私有的(不是吗?)。 但是当我使用这个 ClassC 对象时,我可以调用方法 methodForClassB,因为它是一个公共方法。怎么解释?

ClassC classC = new ClassC();

IClassB classB = new ClassC();
classB.methodForClassB();*

((IClassB)classC).methodForClassB();

【问题讨论】:

  • 接口的全部意义在于能够调用其方法(另请参见 Liskov 替换原则)。你不能那样做。

标签: c#


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 2015-09-13
    • 1970-01-01
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多