我在ASP.NET System.Web.UI.Page中添加了一个扩展方法。 我的应用程序中的每个页面都继承自此类。
但是,我不能只访问扩展方法。我必须输入this.MyMethod();
,而不是只能使用MyMethod()
。我认为this
的方法/属性本身就属于默认范围。我不明白的是什么?或者这是扩展方法的细微差别?
答案 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
不要忘记持有扩展方法的类应该是静态的。