我有一個具體的查詢與接口。默認情況下,接口方法是抽象的和虛擬的,所以如果我們實現該接口並在類中定義,我們實際上會覆蓋該方法,但是當我們在實現類中再次將該方法標記爲虛擬時,爲什麼編譯器不考慮我們實際上正在嘗試隱藏原始接口的虛擬方法。就像我們在基類中有一個虛擬方法並且派生類再次將方法標記爲虛擬的那樣,編譯器會給出警告,說明您隱藏了基類方法,所以如果您故意使用新方法隱藏基類方法。爲什麼在實現接口方法時允許虛擬?
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