【发布时间】:2011-10-28 17:47:10
【问题描述】:
为了记录,我已经看到了这个connect item,但我真的不明白支持这个会有什么问题。
假设我有以下代码:
public interface IInterface
{
void Method();
}
public class Base : IInterface
{
virtual void IInterface.Method()
{
throw new NotImplementedException();
}
}
虚拟标识符有什么问题?拥有一个虚拟修饰符可以override 表明基类中有不同的实现。我现在可以通过删除虚拟方法并像这样创建派生类来使其工作:
public class Derived : IInterface
{
void IInterface.Method()
{
throw new NotImplementedException();
}
}
但是这种方式我真的没有任何迹象表明我正在覆盖某些东西。
更新:
根据 C#(部分:20.4.1 显式接口成员实现)规范,有两个原因。
- 隐藏某些方法(我正在使用它)。
- 有 2 个具有相同签名但返回类型不同的函数 (例如对 IClonable 很有用)。
它没有说明为什么不能将这些方法设为虚拟。
更新 2:
鉴于答案,我认为我应该在这里重新表述真正的问题。如果上述两个原因是首先使接口的显式实现成为可能的原因。如果您将方法设为虚拟,为什么会有问题。
【问题讨论】:
标签: c# compiler-construction interface explicit-interface