据我所知,C#才让我们使用扩展方法有一个类的实例:C#扩展方法只与类的一个实例一起工作。任何方式呢?
public class MyClass
{
public static string GetStuff()
{
return string.Empty;
}
}
public static class MyClassExtension
{
public static string GetOtherStuff(this MyClass myClass)
{
return string.Empty;
}
}
用法:
MyClass.GetStuff();
MyClass.GetOtherStuff(); // Cannot resolve symbol 'GetOtherStuff'
new MyClass().GetOtherStuff(); // This works
然而,我注意到,MVC框架允许我向HtmlHelpers以这种方式可以使用我的扩展方法而不创建任何类的实例。例如,如果我为HtmlHelper
这样创建一个扩展方法:
public static string MyHtmlHelper(this HtmlHelper helper)
{
return string.Empty;
}
我可以在Razor视图使用这样的:
@Html.MyHtmlHelper() // no need to instantiate a class
我真的想达到同样的结果我MyClass
,所以我可以这样做:
MyClass.GetOtherStuff()
我该怎么做?
是什么让你觉得'@ Html'不是一个类的实例? –
您能否详细说明一下?我怎样才能达到这个结果,所以我不需要使用符号new MyClass()? – tocqueville
在Razor视图中,@ Html是[此属性](https://msdn.microsoft.com/en-us/library/system.web.mvc.webviewpage.html(v = vs.118).aspx #P:System.Web.Mvc.WebViewPage.Html)的基类。如果您愿意在使用时强制实施基本级别的要求(如Razor),那么您可以实现这一目标。 –