Wie schreiben Sie ein C# - Erweiterung-Methode für einen Generisch Typisierten Klasse
Sollte dies hoffentlich eine einfache.
Möchte ich hinzufügen, eine Erweiterung der Methode auf das System.Web.Mvc.ViewPage< T > class.
Wie soll diese Methode Aussehen?
Meine erste intuitive Gedanke ist etwas wie:
namespace System.Web.Mvc
{
public static class ViewPageExtensions
{
public static string GetDefaultPageTitle(this ViewPage<Type> v)
{
return "";
}
}
}
Lösung
Die Allgemeine Lösung ist diese Antwort.
Die Lösung, die Ausweitung des Systems.Web.Mvc.ViewPage-Klasse ist meine Antwort unten, angefangen von der Allgemeine Lösung.
Der Unterschied ist in dem speziellen Fall, müssen Sie beide einen generisch typisierten Methode Erklärung UND Anweisung zur Durchsetzung der generische Typ als Typ der Referenz.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich nicht die VS installiert auf meiner aktuellen Maschine, aber ich denke, die syntax würde sein:
Dank leddt.
Tun, ergab die Fehlermeldung:
zeigte mir auf dieser Seite, die ergab diese Lösung:
Es muss nur der generische Typ-Bezeichner auf die Funktion:
Edit: Nur vermisst es um Sekunden!
Können Sie auch brauchen/wollen, fügen Sie "new()" Qualifikation für den generischen Typ (z.B. "where T : class, new()" um zu erzwingen, dass T ist sowohl ein Referenz-Typ (Klasse) und hat einen parameterlosen Konstruktor.
Glenn Block hat ein gutes Beispiel für die Umsetzung einer
ForEach
Erweiterung MethodeIEnumerable<T>
.Aus seiner blog-post:
Wenn Sie möchten, dass die Erweiterung nur für den angegebenen Typ
Sie einfach nur angeben müssen, die tatsächliche Art Sie verarbeitet werden
etwas wie...
Hinweis intellisense wird dann nur die Anzeige der Erweiterung Methode, wenn Sie erklären, Ihre (in diesem Fall) ViewPage mit dem passenden Typ.
Auch, am besten nicht zu verwenden, das System.Web.Mvc-namespace, ich weiß, das ist bequem, aber nicht den namespace an, in aufzuhalten der Benutzung Abschnitt, aber seine weit mehr wartbar, wenn Sie erstellen Sie Ihre eigenen Erweiterungen namespace für die Erweiterung von Funktionen.
Hier ist ein Beispiel für Razor-views:
Muss man wirklich nicht verwenden die Generische version wie der generische erstreckt sich die non-generic-so setzen Sie es in die nicht-generische Basisklasse und du bist fertig 🙂