2011-09-24 86 views
6

我有一個基類,我想爲所有繼承類的方法提供一些「基礎」功能。新建與覆蓋之間的區別?

在我的繼承類我想做的事:

public override void Setup() 
{ 
    base.Setup(); 
} 

但此刻它說我必須使用new關鍵字。

如何獲得它我必須使用override關鍵字?

與我使用關鍵詞new和使用override的方式有什麼不同?

+3

http://msdn.microsoft.com/en-us/library/ms173153%28v=VS.100%29.aspx – MPelletier

+1

[C#關鍵字使用情況virtual + override vs. new](http:// stackoverflow.com/questions/159978/c-keyword-usage-virtualoverride-vs-new) – MPelletier

+0

感謝這是一個偉大的鏈接 – Blankman

回答

7

這是這麼說的,因爲您還沒有聲明基本方法virtual。一旦你這樣做了,基地virtual /派生override雙關鍵字將是有道理的。目前,編譯器正在抱怨說您不能使用override的非virtual方法。

+3

...只有虛擬的方法可以被覆蓋。 –

4

當您使用override關鍵字時,即使實例作爲基類類型傳遞,也會使用派生方法。因此,需要在基類中有一個虛擬的,以便程序知道它必須對實例的實際類型進行運行時檢查。然後它查找實際類型是什麼,如果它是派生類型,它會檢查它們是否是基類中特定方法的派生類中的重寫。

成員隱藏是不同的。如果基本成員實際上是作爲派生類的實例傳遞的,則它將僅被隱藏。如果該對象作爲基類傳遞,則仍將使用基類方法。如果您隱藏了會員,如果您沒有使用新的關鍵字,則會收到警告。新的關鍵字僅僅是告訴編譯器,你確實的意思是隱藏基類型方法。

相關問題