我有一个具体的查询与接口。默认情况下,接口方法是抽象的和虚拟的,所以如果我们实现该接口并在类中定义,我们实际上会覆盖该方法,但是当我们在实现类中再次将该方法标记为虚拟时,为什么编译器不考虑我们实际上正在尝试隐藏原始接口的虚拟方法。就像我们在基类中有一个虚拟方法并且派生类再次将方法标记为虚拟的那样,编译器会给出警告,说明您隐藏了基类方法,所以如果您故意使用新方法隐藏基类方法。为什么在实现接口方法时允许虚拟?
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
而不是虚拟的,假设接口中的方法默认是抽象的,更有意义。 – 2010-12-17 12:44:41
是的,这很好,但一旦编译器附加虚拟方法,并且你在实现该方法时再次虚拟,那么编译器应该说你隐藏了原始声明。 – 2010-12-17 12:54:49