我發現了幾個問題來解釋覆蓋和隱藏方法的虛擬/覆蓋/新關鍵字,但他們似乎沒有解決我的情況。我有我的MVC控制器,看起來像這樣做驗證碼:繼承和重寫的私人幫手方法
public class AController : BaseController
{
private bool validate()
{
//code for A validation
return base.validate();
}
}
public class BController : BaseController
{
private bool validate()
{
//code for B validation
return base.validate();
}
}
public class BaseController : Controller
{
protected bool validate()
{
//code for common validation
return isValid;
}
}
A和B都調用this.validate()在他們的創建和編輯POST方法。據我所知,這工作正常,但我不明白何時/如果我應該使用虛擬/覆蓋。受保護的基礎方法應該是虛擬的嗎?它會改變什麼嗎?我沒有看到編譯器警告我隱藏了繼承的成員,在其他時候我沒有看到「覆蓋」。我猜虛擬/覆蓋不起作用,因爲validate()是一個私有方法。我知道我也可以將BaseController.validate()重命名爲其他內容,例如BaseValidate(),而不必考慮重寫。這一點是否重要,或者這種方法被稱爲「驗證」還是一個不同的名稱?