我有一個基類,我想爲所有繼承類的方法提供一些「基礎」功能。新建與覆蓋之間的區別?
在我的繼承類我想做的事:
public override void Setup()
{
base.Setup();
}
但此刻它說我必須使用new關鍵字。
如何獲得它我必須使用override
關鍵字?
與我使用關鍵詞new
和使用override
的方式有什麼不同?
我有一個基類,我想爲所有繼承類的方法提供一些「基礎」功能。新建與覆蓋之間的區別?
在我的繼承類我想做的事:
public override void Setup()
{
base.Setup();
}
但此刻它說我必須使用new關鍵字。
如何獲得它我必須使用override
關鍵字?
與我使用關鍵詞new
和使用override
的方式有什麼不同?
這是這麼說的,因爲您還沒有聲明基本方法virtual
。一旦你這樣做了,基地virtual
/派生override
雙關鍵字將是有道理的。目前,編譯器正在抱怨說您不能使用override
的非virtual
方法。
...只有虛擬的方法可以被覆蓋。 –
當您使用override關鍵字時,即使實例作爲基類類型傳遞,也會使用派生方法。因此,需要在基類中有一個虛擬的,以便程序知道它必須對實例的實際類型進行運行時檢查。然後它查找實際類型是什麼,如果它是派生類型,它會檢查它們是否是基類中特定方法的派生類中的重寫。
成員隱藏是不同的。如果基本成員實際上是作爲派生類的實例傳遞的,則它將僅被隱藏。如果該對象作爲基類傳遞,則仍將使用基類方法。如果您隱藏了會員,如果您沒有使用新的關鍵字,則會收到警告。新的關鍵字僅僅是告訴編譯器,你確實的意思是隱藏基類型方法。
http://msdn.microsoft.com/en-us/library/ms173153%28v=VS.100%29.aspx – MPelletier
[C#關鍵字使用情況virtual + override vs. new](http:// stackoverflow.com/questions/159978/c-keyword-usage-virtualoverride-vs-new) – MPelletier
感謝這是一個偉大的鏈接 – Blankman