C# 控制器扩展方法,而不使用此
我想创建控制器扩展方法。到目前为止,我得到的信息如下C# 控制器扩展方法,而不使用此,c#,asp.net-mvc-3,C#,Asp.net Mvc 3,我想创建控制器扩展方法。到目前为止,我得到的信息如下 public ActionResult Foo() { this.ExtensionMethod(); return View(); } public static void ExtensionMethod(this Controller controller) { } 我不喜欢的是,ExtensionMethod必须使用this关键字调用。有没有可能摆脱这个?没有 正是this关键字使该方法成为扩展方法。没有它,它只是
public ActionResult Foo()
{
this.ExtensionMethod();
return View();
}
public static void ExtensionMethod(this Controller controller)
{
}
我不喜欢的是,ExtensionMethod必须使用this
关键字调用。有没有可能摆脱这个?没有
正是this
关键字使该方法成为扩展方法。没有它,它只是一个静态方法
编辑:对不起,我误解了这个问题。有两个this
关键字:一个在扩展方法中,另一个用于调用它
调用时需要
this
关键字的原因是需要指定要扩展的对象。C#不会自动解析对扩展方法的本地方法调用,除非您指定this
关键字。就是这样。你不能反对它
您可能会考虑将其放入基类中—这通常不是一个好主意(因为它会破坏基类)。您可以像这样使用它
this.ExtensionMethod();
或
您的选择…为什么不使用常规方法而不是扩展方法?@Tomas的确,如果您能够编辑类型本身,为什么不使用常规方法?扩展方法只是扩展锁定类型的糖类。因为这个方法将是帮助程序,我想嵌入到控制器类中。我不想每次使用该方法时都编写新的MyHelperClass().ExtensionMethod。他指的是从控制器本身调用该方法:this.ExtensionMethod()。不管怎样,扩展方法也是静态方法。扩展方法在IntelliSense中看起来更好:-)他问了关于调用
this.ExtensionMethod()的问题代码>不是关于声明我问过关于使用关键字this的方法调用。我知道要获得扩展方法,这个关键字必须在方法声明中。是的,我几乎在发布答案时就发现了这一点。抱歉。@x2:或者糖不够甜。
ExtenstionClassName.ExtensionMethod(this);