记录一下,我已经看到了这个连接项,但我实在无法理解为什么不支持这种方式。
假设我有以下代码:
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 显式接口成员实现),有两个原因。
1. 隐藏某些方法(我用它来做这个)。 2. 有两个具有相同签名但返回类型不同的函数(例如,对于IClonable很有用)。
然而,它并没有说明为什么不能将这些方法设置为虚拟的。
更新2:根据答案,我认为我应该重新表述真正的问题。如果上述两个原因是为什么首先使显式接口实现成为可能的原因。那么,如果您将方法设置为虚拟的,会有什么问题?