C# 为什么'w(“hi”)不起作用,但'this.w(“hi”)起作用?

C# 为什么'w(“hi”)不起作用,但'this.w(“hi”)起作用?,c#,c#-4.0,razor,C#,C# 4.0,Razor,可能重复: 我想本地化我的MVC应用程序,然后我想使用wmessage方法和as 弗莱姆回答说,我有这个密码: namespace System.Web.WebPages { public static class Localization { public static string w(this WebPageBase page, string message) { return message; }

可能重复:

我想本地化我的MVC应用程序,然后我想使用wmessage方法和as 弗莱姆回答说,我有这个密码:

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

但是在razor pagepage.cshtml中,我不能使用@whi,但是@this.whi可以工作。我想知道这个方法是如何工作的,但方法不工作?

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

在您的情况下,因为这是一个扩展方法,所以它引用的是WebPageBase类型的当前页面。因此,这个.whi实际上与您所写的相同:

@WebPageBase.w("hi")
。。。这相当于:

@Localization.w(this, "hi")

要调用静态方法,必须指定该方法所属的类

在您的情况下,因为这是一个扩展方法,所以它引用的是WebPageBase类型的当前页面。因此,这个.whi实际上与您所写的相同:

@WebPageBase.w("hi")
。。。这相当于:

@Localization.w(this, "hi")
w是一个扩展方法,它们的工作方式是将调用它的对象放置在方法签名中,以代替此指定的参数

在本例中,您指定的是它应该处理的对象

如果您jsut调用w,那么您没有指定第一个参数

我假设您认为,如果它是该对象的一个方法,那么两个调用将是相同的,这是真的。然而,不同之处在于,在范围内没有一种方法仅仅是w。该方法在另一个类中,它是唯一一种神奇的扩展方法,允许它在正确的环境中工作。

w是一种扩展方法,它们的工作方式是将调用它的对象放置在方法签名中,以代替此指定的参数

在本例中,您指定的是它应该处理的对象

如果您jsut调用w,那么您没有指定第一个参数


我假设您认为,如果它是该对象的一个方法,那么两个调用将是相同的,这是真的。然而,不同之处在于,在范围内没有一种方法仅仅是w。该方法在另一个类中,它是唯一一种神奇的扩展方法,允许它在正确的环境中工作。

您已经为WebPageBase创建了一个扩展方法。 应该使用对象WebPageBase或派生对象调用它。 在您的情况下,这是使用页面对象的正确对象


您已经为WebPageBase创建了一个扩展方法。 应该使用对象WebPageBase或派生对象调用它。 在您的情况下,这是使用页面对象的正确对象


我假设,因为w是一个扩展方法,它必须有一个对象来处理。我假设,因为w是一个扩展方法,它必须有一个对象来处理。该方法属于本地化,是一个扩展方法。需要WebPageBase类型的对象来调用该方法,这就是为什么需要这样做的原因。该方法属于本地化,是一个扩展方法。调用该方法需要WebPageBase类型的对象,这就是为什么需要这样做的原因。请记住,扩展方法只是语法糖。这与本地化相同。此。不指定此选项与本地化相同。w`。这个重载不存在。@cadrell0:是的,也许应该更明确一些,但链接的副本只会说现在需要说的一切,这样我就不用再编辑我的答案了请记住,扩展方法只是语法糖。这与本地化相同。此。不指定此选项与本地化相同。w`。这个重载不存在。@cadrell0:是的,也许应该更明确一些,但链接的副本只会说现在需要说的一切,这样我就不用再编辑我的答案了