【发布时间】:2012-04-12 21:11:07
【问题描述】:
我正在阅读 ASP.NET MVC3 的源代码,在ControllerBase 的代码中发现了以下内容:
public interface IController
{
void Excecute(RequestContext requestContext);
}
public abstract class ControllerBase : IController
{
protected virtual void Execute(RequestContext requestContext)
{
if (requestContext == null)
{
throw new ArgumentNullException("requestContext");
}
if (requestContext.HttpContext == null)
{
throw new ArgumentException(MvcResources.ControllerBase_CannotExecuteWithNullHttpContext, "requestContext");
}
VerifyExecuteCalledOnce();
Initialize(requestContext);
using (ScopeStorage.CreateTransientScope())
{
ExecuteCore();
}
}
void IController.Execute(RequestContext requestContext)
{
Execute(requestContext);
}
}
ControllerBase 提供了Execute 的实现,但它有一些东西可以为..IController.Execute 提供定义?
为什么要这样做,它实现了什么?好像没什么用。
【问题讨论】:
-
如果你覆盖了虚拟的
Execute,显式的IController.Execute还会执行基础实现吗? -
@Joe 不。如果存在,它将执行覆盖的虚拟执行。
-
因此,获得该方法
protected而不是public可能只是一个技巧。 -
@Joe 可能是。这就是 vhallac 的建议,强制执行职责分离。
标签: asp.net-mvc-3 interface implementation