我正在加入我公司的一個遺留項目,這是一個使用ASP.NET MVC開發的企業網站。爲什麼我們需要調用ASP.NET MVC中父類的空虛方法
由於我是新來的C#和框架(我來自一個Java的背景是),我失敗了理解的代碼,這個特殊的一塊:
internal sealed class ValidatingModelBinder : DefaultModelBinder
{
protected override void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
base.OnModelUpdated(controllerContext, bindingContext); // This is the damn call I'm stuck with
var model = bindingContext.Model as IValidatableObject;
if (model != null)
{
ValidateModel(model, bindingContext.ModelState);
}
}
// more methods below...
}
現在,我想知道什麼base.OnModelUpdated(....)
調用不做,所以我徑自的DefaultModelBinder
定義,才發現OnModelUpdated()
是虛方法與空方法體:
protected virtual void OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext);
這是什麼意思? 爲什麼要調用父類的空方法?
它只是向您展示定義,而不是實現。最後注意';'。見[這裏](https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Mvc/DefaultModelBinder.cs#L544) – Rob
嗨@Rob我相信調用一個點父方法是讓父方法中的邏輯處理/使用數據。然而,在這種特殊情況下,只有一個方法定義(如您所指出的那樣),並且沒有具體的實現。那麼爲什麼還要在第一時間打電話呢? –
您只有可用的方法定義來檢查*,但這並不意味着沒有實現。很多.NET堆棧都是封閉源碼(至少直到最近)。因此,雖然您可能會看到有哪些方法可用,但您無法在方法內看到源代碼。你所看到的僅僅是方法定義(即,班級允許你做什麼),而不是它如何做。看到我上面的鏈接到實際的源代碼(取決於你的版本,它可能會略有不同)。 – Rob