可能重复:
Why is the 'this' keyword required to call an extension method from within the extended class
我想要本地化我的MVC应用程序,然后我想使用w(message)
方法和as
“flem”回答here我有这段代码:
namespace System.Web.WebPages
{
public static class Localization
{
public static string w(this WebPageBase page, string message)
{
return message;
}
}
}
但是在剃刀页面(page.cshtml
)中,我无法使用@w("hi")
但@this.w("hi")
无效。 我想知道this.method()
如何工作,但method()
不起作用?
答案 0 :(得分:2)
要调用静态方法,您必须指定方法所属的类。
在您的情况下,因为这是一种扩展方法,this
指的是WebPageBase
类型的当前页面。所以this.w("hi")
实际上和你写的一样:
@WebPageBase.w("hi")
......相当于:
@Localization.w(this, "hi")
答案 1 :(得分:2)
w
是一种扩展方法,它们的工作方式是您调用它的对象代替方法签名中this
指定的参数。
在this.w
的情况下,您正在指定它所处理的对象。
如果你jsut调用w("")
,那么你没有指定第一个参数。
我假设您正在考虑如果它是该对象的方法,则两个调用将是相同的,这是真的。但是,区别在于范围内没有只有w
的方法。该方法在另一个类中,它只是扩展方法的神奇之处,它允许它在正确的环境中工作。
答案 2 :(得分:1)
您已为WebPageBase创建了一个扩展方法
应该使用对象WebPageBase或派生对象来调用它
在您的情况下,this
是要使用的正确对象(可能是页面对象)