1

可能重复:
为什么从扩展类中调用扩展方法需要“this”关键字

我想本地化我的 MVC 应用程序,然后我想使用方法,并且在这里w(message)回答“flem” ,我有以下代码:

namespace System.Web.WebPages
{
    public static class Localization
    {
        public static string w(this WebPageBase page, string message)
        {
            return message;
        }
    }
}

但在 razor page( page.cshtml) 中我不能使用@w("hi")@this.w("hi")可以工作。我想知道它是如何this.method()工作但method()不起作用的?

4

3 回答 3

2

要调用静态方法,您必须指定该方法属于哪个类。

在您的情况下,因为这是一个扩展方法,所以this是指类型为 的当前页面WebPageBase。所以this.w("hi")实际上和你写的一样:

@WebPageBase.w("hi")

...相当于:

@Localization.w(this, "hi")
于 2012-08-31T12:41:32.587 回答
2

w是一种扩展方法,它们的工作方式是您调用它的对象被放置在this方法签名中指定的参数的位置。

如果this.w您正在指定它应该处理的对象。

如果你只是打电话w(""),那么你没有指定第一个参数。

我假设您在想,如果它是该对象的方法,那么这两个调用将是相同的,这是真的。但是,不同之处在于,范围内没有方法只是w. 该方法在另一个类中,它唯一的扩展方法的魔力允许它在正确的情况下工作。

于 2012-08-31T12:42:20.857 回答
1

您已经为 WebPageBase 创建了一个扩展方法。
应该使用对象 WebPageBase 或派生对象来调用它。
在您的情况下this是要使用的正确对象(可能是 Page 对象)

http://msdn.microsoft.com/en-us/library/bb383977.aspx

于 2012-08-31T12:42:37.377 回答