当直接从实现者类访问接口成员时,我们通常会明确地实现接口。天气它必须是内部的,或者它会导致与API设计的冲突,或者当它增加误用方法的机会时。
在我的脑海中绝对不鼓励为具有不同逻辑的多个接口单独实现成员,所以这不是这里的情况
编译器不允许将此类实现作为虚拟,因为它没有意义,我认为这是正确的。通常,显式实现非常敏感,这就是您尝试隐藏它的原因。
然而,我发现了一种过度显式实施的方法(它不是完全覆盖,而是其作弊选择)
我发现这令人惊讶且非常令人失望。我的问题是为什么允许以下代码并且工作完美?我希望得到错误,该接口已经明确实现。
这只是重现问题的基本示例
docker-compose up
答案 0 :(得分:2)



为什么允许使用以下代码并且工作正常?


因为规格如此说明:

& #xA;


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


然而在多态性中,俗话说 “更多派生类型知道更多”,再次从规范:





派生类可以扩展和专门化基类


因此,当您调用时,将显式调用实现该接口的派生类型最多的类型接口成员。

答案 1 :(得分:0)
我建议您考虑从C#到本地代码的低级转换:接口继承重新声明,以及其一个或多个方法覆盖,强制重写VMT - 虚方法表(接口方法是虚拟的设计)。