Soweit ich weiß, C# lassen Sie uns Erweiterungsmethoden mit einer Instanz einer Klasse nur verwenden:C# -Erweiterungsmethode, die nur mit einer Instanz der Klasse arbeitet. Irgendwie in der Nähe?
public class MyClass
{
public static string GetStuff()
{
return string.Empty;
}
}
public static class MyClassExtension
{
public static string GetOtherStuff(this MyClass myClass)
{
return string.Empty;
}
}
Verbrauch: Jedoch
MyClass.GetStuff();
MyClass.GetOtherStuff(); // Cannot resolve symbol 'GetOtherStuff'
new MyClass().GetOtherStuff(); // This works
ich, dass der MVC-Framework mir bemerkt erlaubt zu verlängern die HtmlHelpers so, dass ich meine Erweiterungsmethoden verwenden kann, ohne irgendeine Instanz einer Klasse zu erstellen. wenn ich eine Erweiterungsmethode für HtmlHelper
wie dies zum Beispiel zu erstellen:
public static string MyHtmlHelper(this HtmlHelper helper)
{
return string.Empty;
}
kann ich es in einem Rasiermesser Ansicht wie folgt verwenden:
@Html.MyHtmlHelper() // no need to instantiate a class
Ich würde wirklich das gleiche Ergebnis zu erzielen wie mit meinem MyClass
, so kann ich tun:
MyClass.GetOtherStuff()
Wie könnte ich das tun?
Was lässt Sie denken, '@ Html' ist keine Instanz einer Klasse? –
Können Sie bitte ausarbeiten? Wie kann ich dieses Ergebnis erzielen, damit ich nicht die Notation new MyClass() verwenden muss? – tocqueville
In einer Razor-Ansicht ist "@ Html" [diese Eigenschaft] (https://msdn.microsoft.com/en-us/library/system.web.mvc.webviewpage.html (v = vs.118) .aspx) #P: System.Web.Mvc.WebViewPage.Html) der Basisklasse. Wenn Sie bereit sind, eine Basisklasse-Anforderung zum Zeitpunkt der Verwendung aufzuerlegen (wie Razor), können Sie dies erreichen. –