【发布时间】:2011-05-27 02:34:42
【问题描述】:
我对接口有一个特定的查询。默认情况下,接口方法是抽象和虚拟的,因此如果我们实现该接口并在类中给出定义,我们实际上会覆盖该方法,但是当我们在实现类中再次将该方法标记为虚拟时,为什么编译器不考虑我们实际上是在尝试隐藏原始接口虚拟方法。就像我们在基类中有一个虚拟方法,派生类再次将该方法标记为虚拟,在这种情况下编译器会发出警告,表明您正在隐藏基类方法,因此如果您有意使用 new隐藏基类方法。
public interface ITestInterface
{
void virtualmethod(); // this method is by default virtual.
}
public class TestInterface :ITestInterface
{
public virtual void virtualmethod()
{
// Now compiler should consider that i am actually hiding the interface virtual method.
}
}
如果您为接口构建上述代码并在 ILDASM 中打开,您将看到如下代码:
.method public hidebysig newslot abstract virtual
instance void virtualmethod() cil managed
{
}//end of method ITestInterface::virtualmethod
【问题讨论】:
-
而不是虚拟,假设接口中的方法默认是抽象的,更有意义。
-
是的,很好,但是一旦编译器将 virtual 附加到方法中并且您在实现该方法时再次放置 virtual,那么编译器应该说您隐藏了原始声明。
标签: c# interface methods virtual