Ich frage mich, ob ich Erweiterungsmethode oder andere Techniken verwenden kann, um statische Klasse wie System.Net.Mime.MediaTypeNames.Image
zu erweitern, hat es weniger Typ als ich brauche.Erweiterungsmethode zur Erweiterung der statischen Klasse
Antwort
Nein, Erweiterungsmethoden können nur zum Hinzufügen von Instanzmethoden, nicht von statischen Methoden (oder sogar Eigenschaften) verwendet werden. Erweiterungsmethoden sind wirklich nur syntaktische Zucker um statische Methoden. Zum Beispiel, wenn Sie eine Erweiterungsmethode wie Count() verwenden:
var list = GetList();
var size = list.Count();
Dies wird kompiliert tatsächlich:
var list = GetList();
var size = Enumerable.Count(list);
Sie können nicht hinzufügen zusätzliche statische Methoden zu einer vorhandenen Klasse mit Erweiterungsmethoden .
Ist es korrekt zu sagen, dass "Erweiterungsmethoden nur zum Hinzufügen von Instanzmethoden verwendet werden können"? Wie Sie erklären, erscheinen sie nur als Instanzmethoden. Sie sind keine Instanzmethoden oder Sie können auf nicht öffentliche Mitglieder der Klasse zugreifen. –
Nein, das ist in C# noch nicht möglich, aber hoffentlich wird es irgendwann so werden. Und Sie können keine statische Klasse ableiten und neue Methoden auf diese Weise hinzufügen, da statische Klassen von object
abgeleitet werden müssen. Eine Sache, die Sie tun können, die einen ziemlich ähnlichen Effekt in Ihrem Code hervorbringt, ist einfach eine andere statische Klasse zu deklarieren, die Sie stattdessen benutzen werden, wenn Sie Ihre Erweiterungsmethoden wollen. Zum Beispiel:
public static class MessageBox2
{
public static DialogResult ShowError(string Caption, string Message, params object[] OptionalFormatArgs)
{
return MessageBox.Show(string.Format(Message, OptionalFormatArgs), Caption, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
Da die ursprüngliche Klasse statisch ist, per Definition des „Erweiterung“ -Methode muss nicht eine Instanz als this
Parameter empfangen und einfach statische Methoden der ursprünglichen Klasse verwenden kann.
- 1. Erweiterungsmethode Anruf andere in der gleichen Erweiterung Klasse - gutes Design?
- 2. Linq Erweiterungsmethode - GetYearWeekFormat Erweiterung
- 3. Alternative zur statischen Klasse für zustandslose Objekte
- 4. T4 Referenz eine Konstante in einer statischen Klasse zur Kompilierzeit
- 5. Klon der statischen Klasse
- 6. Erweiterungsmethode für Generic Klasse
- 7. Erweiterungsmethode auf Klasse - gute oder schlechte Idee?
- 8. So implementieren Sie die Erweiterungsmethode in der abstrakten Klasse
- 9. Serialisierung der statischen inneren Klasse
- 10. Abrufen der MethodInfo der statischen Methode einer statischen Klasse
- 11. Zweck der statischen Objekte innerhalb der Klasse
- 12. Erweiterung der PDO-Anweisung Klasse
- 13. Erweiterung Methode muss in einer nicht-generischen statischen Klasse definiert wird
- 14. Hinzufügen der Authentifizierung zur statischen Azure-Website
- 15. ClassNotFoundException auf der statischen inneren Klasse
- 16. Hinzufügen der Erweiterungsmethode zu MembershipProvider
- 17. Refactoring einer statischen Klasse zur Verwendung mit Dependency-Injektion
- 18. Erweiterung für Klasse mit spezifischem Attribut
- 19. Erweiterung der Laravel Eloquent \ Sammlung Klasse
- 20. Serialisieren einer statischen Klasse?
- 21. Was ist der Umfang einer statischen Klasse?
- 22. Initialisierungsreihenfolge der statischen Felder in Static Klasse
- 23. Bereich der statischen inneren Klasse in ASP.NET
- 24. Wrapping-Session-Behandlung in der statischen Klasse
- 25. Designmuster zur Erweiterung der Android-Aktivitäten?
- 26. Keine Erweiterungsmethode "First" auf abgeleitete Klasse
- 27. Verwendung von Erweiterungsmethoden zur Verbesserung der Lesbarkeit
- 28. Hinzufügen einer Erweiterungsmethode zu der String-Klasse - C#
- 29. Wie nicht-statische Kind Klasse der statischen Klasse serialisiert
- 30. Inner Join innerhalb der Erweiterungsmethode (linq)
Sie können statische Klassen nicht erweitern; Suchen Sie nach SO für Duplikate dieser Frage und Sie werden einige Problemumgehungen sehen. – BeemerGuy
Warum würden Sie das jemals brauchen? Die statische Klasse hat keinen Kontext, und was auch immer Sie in einer statischen Klasse tun können, könnte "irgendwo" anders im Code erfolgen. –
@Amby - Ich denke, dass Sie es nur für organisatorische Zwecke tun möchten. Sicher könntest du eine statische ImageUtility-Klasse mit den notwendigen Methoden erstellen (was er laut dieser Antwort sowieso tun muss), aber ich denke, der OP möchte seinen Code so organisieren, dass er die zusätzliche Klasse nicht benötigt . Leider kannst du nicht. (Ich kam hierher, um das Gleiche zu tun). – MattW