扩展方法 - 必须使用此关键字?

时间:2011-04-07 18:51:20

标签: c# asp.net extension-methods

我在ASP.NET System.Web.UI.Page中添加了一个扩展方法。 我的应用程序中的每个页面都继承自此类。

但是,我不能只访问扩展方法。我必须输入this.MyMethod();,而不是只能使用MyMethod()。我认为this的方法/属性本身就属于默认范围。我不明白的是什么?或者这是扩展方法的细微差别?

3 个答案:

答案 0 :(得分:5)

  我认为那些方法/属性   这本质上是默认的   范围。

他们是。但扩展方法是默认范围内this not 方法;它们是通过语法糖提供的静态方法,由编译器提供。

我相信您已经知道这一点,但只是为了澄清:如果ExtensionMethod是您当前所在范围的类的扩展方法,请输入:

this.ExtensionMethod();

...与:

相同
SomeStaticClass.ExtensionMethod(this);

this需要作为参数传递给ExtensionMethod。上面的第一种方法,编译器只是为你做这件事。

当然,他们可以以不同的方式实现事物,以便编译器将扩​​展方法以及类成员“引入”默认范围;他们只是选择不这样做。就个人而言,我喜欢这样;但我想这是一个主观问题。无论如何,如果你不想输入this,那只会是一个小麻烦,对吗?

答案 1 :(得分:2)

  

这是扩展方法的细微差别吗?

是的,确实如此。 (正如其他人所解释的那样。)

如果你想在没有任何资格的情况下使用这个方法,那么你可以创建一个继承自Page的类并包含你的方法(当然,减去第一个参数)。然后,让您的应用程序中的每个页面继承自新的自定义页面。

答案 2 :(得分:0)

要使用扩展方法,您应该声明:

using Namespace.Where.Extension.Method.Is.Located

不要忘记持有扩展方法的类应该是静态的。