Sto leggendo il codice sorgente di ASP.NET MVC3, e mi sono imbattuto nel seguente all'interno del codice per ControllerBase:Qual è il punto di questo codice?
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 fornisce un'implementazione di Execute
, ma poi ha qualcosa che fornisce una definizione per .. IController.Execute
?
Perché è fatto e cosa ottiene? Sembra che non serva a nulla.
Se si escludeva il virtuale 'Execute', sarebbe l'esplicito' IController.Execute' ancora eseguire l'implementazione di base? – Joe
@Joe No. Eseguirà un Overriden virtuale Execute, se ne esiste uno. – Scott
Quindi forse è solo un trucco per ottenere quel metodo 'protetto' e non' pubblico' allora. – Joe