我知道virtual
和sealed
關鍵字的定義,但是如果您沒有在方法中使用它們中的任何一個,默認情況下該方法是否可以被重寫?C#方法是默認密封還是虛擬的?
我來自vb.net背景。它是這樣的在vb.net(從MSDN):
如果未指定可重寫或NotOverridable改性劑,所述 默認設置取決於屬性或方法是否覆蓋了一個 基類屬性或方法。如果該屬性或方法覆蓋 基類屬性或方法,則默認設置爲「可覆蓋」; 否則,它是NotOverridable。
我只是想知道在C#中這是否也是如此。
我知道virtual
和sealed
關鍵字的定義,但是如果您沒有在方法中使用它們中的任何一個,默認情況下該方法是否可以被重寫?C#方法是默認密封還是虛擬的?
我來自vb.net背景。它是這樣的在vb.net(從MSDN):
如果未指定可重寫或NotOverridable改性劑,所述 默認設置取決於屬性或方法是否覆蓋了一個 基類屬性或方法。如果該屬性或方法覆蓋 基類屬性或方法,則默認設置爲「可覆蓋」; 否則,它是NotOverridable。
我只是想知道在C#中這是否也是如此。
不,不可能。您需要將方法顯式標記爲虛擬以允許在派生類中重寫它。
但是,您可以做的是使用new關鍵字來隱藏方法。 (MSDN文檔)
在類定義和方法上都使用sealed關鍵字。它不允許從類繼承或重寫方法。默認情況下,如果您不使用此關鍵字,其他人將能夠從您的班級繼承。 (MSDN Documentation)
默認C#中的方法是而不是虛擬。
與Java不同,C#方法默認不是virtual
。他們既不是sealed
,但你不能重寫他們,因爲他們是正常的方法。
不,您不能覆蓋非虛擬方法。新的關鍵字只隱藏了基類的實現,不是一個好習慣。
探討這個與安德斯·海爾斯伯格here
最快的方法是簡單地檢查自己,它不超過約10行代碼來檢查。 – Zipper 2013-03-14 20:58:28