我正在加入公司的旧项目,这是一个用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);
这有什么意义呢?为什么要调用父类的空方法?
确实取决于您对的定义DefaultModelBinder
。该类属于.NET框架,因此您需要反编译器(JustDecompile等)才能查看完整的源代码(定义+实现)。该反编译器可以是外部工具,也可以作为Resharper等集成到Visual Studio中。使用这些工具,当您导航到类的定义时,您可以看到整个源代码。
否则,默认情况下,Visual Studio将进入该文件,该文件几乎只有空定义。(实现可能会丢失)
文件和方法的真实定义可以在这里看到:
https://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Mvc/DefaultModelBinder.cs
如您所见,实现不是空的。
另外,请注意,调用基类的方法不是强制性的。通常,这样做是在应用任何具体的类特定逻辑之前,仅以100%的时间重做某些事情的方式重用基类中的逻辑。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句