私は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
@Joe No.オーバーライドされた仮想Executeが存在すれば実行します。 – Scott
だから、そのメソッドを 'protected'にして' public'にするのはちょうどハックです。 – Joe