2013-03-14 76 views
5

我知道virtualsealed關鍵字的定義,但是如果您沒有在方法中使用它們中的任何一個,默認情況下該方法是否可以被重寫?C#方法是默認密封還是虛擬的?

我來自vb.net背景。它是這樣的在vb.net(從MSDN):

如果未指定可重寫或NotOverridable改性劑,所述 默認設置取決於屬性或方法是否覆蓋了一個 基類屬性或方法。如果該屬性或方法覆蓋 基類屬性或方法,則默認設置爲「可覆蓋」; 否則,它是NotOverridable。

我只是想知道在C#中這是否也是如此。

+8

最快的方法是簡單地檢查自己,它不超過約10行代碼來檢查。 – Zipper 2013-03-14 20:58:28

回答

5

不,不可能。您需要將方法顯式標記爲虛擬以允許在派生類中重寫它。

但是,您可以做的是使用new關鍵字來隱藏方法。 (MSDN文檔)

在類定義和方法上都使用sealed關鍵字。它不允許從類繼承或重寫方法。默認情況下,如果您不使用此關鍵字,其他人將能夠從您的班級繼承。 (MSDN Documentation

+0

注''密封'適用於方法以及類。你可以封閉一個虛擬方法來防止你自己的亞型覆蓋它。 – Servy 2013-03-14 21:02:08

+0

@Servy等我學到了新東西。謝謝! – 2013-03-14 21:04:32

+0

只需添加'new'關鍵字對於基類中存在的派生類中的方法是隱式的,可以是虛擬方法,也可以是非虛擬方法。在派生類中明確提及方法聲明中的'new'關鍵字可以幫助程序員理解這樣一個意圖:「您所看到的方法對參與繼承調用層次結構不感興趣。 – RBT 2017-02-03 23:22:55

6

默認C#中的方法是而不是虛擬。

2

與Java不同,C#方法默認不是virtual。他們既不是sealed,但你不能重寫他們,因爲他們是正常的方法。

2

不,您不能覆蓋非虛擬方法。新的關鍵字只隱藏了基類的實現,不是一個好習慣。

探討這個與安德斯·海爾斯伯格here

相關問題