請看代碼: 1 public abstract class ViewBaseContainer : Page
2 {
3 protected abstract ControllerBaseContainer CreateConcreteContainer (Page owner);
4 }
5 public class BasePage : ViewBaseContainer
6 {
7 protected override ControllerBaseContainer CreateConcreteContainer(BasePage owner)
8 {
9 }
10 }在BasePage中重寫方法CreateConcreteContainer(),傳遞的參數是BasePage的對象,會導致編譯失敗,這里傳遞的參數必須為Page的對象嗎?為什么?
2 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
因為override基類的virtual方法必須保證簽名相同,參見:C#語言規范4.0,第1.6.6.4節。摘錄如下:
1.6.6.4 虛方法、重寫方法和抽象方法
若一個實例方法的聲明中含有 virtual 修飾符,則稱該方法為虛方法 (virtual method)。若其中沒有virtual 修飾符,則稱該方法為非虛方法 (non-virtual method)。
在調用一個虛方法時,該調用所涉及的實例的運行時類型 (runtimetype) 確定了要實際調用的方法實現。在非虛方法調用中,實例的編譯時類型 (compile-timetype) 負責做出此決定。
虛方法可以在派生類中重寫 (override)。當某個實例方法聲明包括 override 修飾符時,該方法將重寫所繼承的具有相同簽名的虛方法。虛方法聲明用于引入新方法,而重寫方法聲明則用于使現有的繼承虛方法專用化(通過提供該方法的新實現)。
- 2 回答
- 0 關注
- 537 瀏覽
添加回答
舉報
0/150
提交
取消