6

我想创建控制器扩展方法。到目前为止我得到的是下面

public ActionResult Foo()
{
    this.ExtensionMethod();
    return View();
}

public static void ExtensionMethod(this Controller controller)
{

}

我不喜欢的是必须使用this关键字调用 ExtensionMethod。有可能摆脱this吗?

4

3 回答 3

11

不。

它是this使该方法成为扩展方法的关键字。没有它,它只是一个静态方法。

编辑:对不起,我误读了这个问题。有两个this关键字:一个在扩展方法中,一个用于调用它。

调用它时需要关键字的原因this是您需要指定要扩展的对象。this除非您指定关键字,否则 C# 不会自动将本地方法调用解析为扩展方法。

于 2012-08-24T08:44:39.250 回答
3

这就是来龙去脉。你不能对它做任何事情。

您可能会考虑将其放入基类中——这通常不是一个好主意(因为它会炸毁基类)。

于 2012-08-24T08:44:56.770 回答
2

你可以像这样使用它。

this.ExtensionMethod();

或者

ExtenstionClassName.ExtensionMethod(this);

你的选择...

于 2012-08-24T10:04:51.783 回答