作为记录,我已经看到了这个连接项目,但我真的不明白支持这个会有什么问题。
假设我有以下代码:
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 很有用)。
但是,它没有说明为什么不能使这些方法成为虚拟方法。
Update2:
鉴于答案,我认为我应该在这里重新表述真正的问题。如果上述两个原因是首先使接口的显式实现成为可能的原因。如果您将方法设为虚拟,为什么会有问题。