Ich habe über Erweiterungsmethoden in C# 3.0 gelesen. Der Text, den ich lese, impliziert, dass eine Erweiterungsmethode mit der gleichen Signatur wie eine Methode in der Klasse, die erweitert wird, in der Reihenfolge der Ausführung zweiter ist - das heißt, die Methode in der versiegelten Klasse wird aufgerufen. Wenn dies der Fall ist, wie können Sie die versiegelte Klasse erweitern?Wenn eine Erweiterungsmethode die gleiche Signatur wie eine Methode in der versiegelten Klasse aufweist, wie lautet die Anrufpräzedenz?
Antwort
Tatsächlich hat die tatsächliche Methode Vorrang vor der Erweiterungsmethode. Und um es klar zu machen - "Order of Execution" deutet darauf hin, dass beide aufgerufen werden könnten; nur Die ursprüngliche Methode wird aufgerufen. Vielleicht wählen Sie einen anderen Namen/Unterschrift; Sie können keine Erweiterungsmethoden für Affen-Patch verwenden, wenn dies Ihre Absicht ist.
Wenn es eine Basisklasse/Schnittstelle gibt (die der Typ implementiert), die nicht diese Methode hat, könnten Sie vielleicht es dort umwandeln ...?
Verwenden Sie eine andere Methodensignatur. Erweiterungsmethoden bedeuten, dass Sie die versiegelte Klasse um neue Funktionen erweitern und die bereits implementierten nicht überschreiben.
Erweiterungsmethoden haben eine Semantik zum Ausblenden von Namen mit Instanzmembern eines Typs. Dies bedeutet, dass jedes zugängliche Instanzelement eines Typs immer alle Erweiterungsmethoden mit demselben Namen schattiert, selbst wenn die Erweiterungsmethode besser passt. Wenn ein Instanzenelement zu einem Typ mit demselben Namen wie eine Erweiterungsmethode hinzugefügt wird, kann die Erweiterungsmethode daher als unberechbar gerendert werden.
Für weitere Informationen nehmen Sie einen Blick auf diesen Beitrag: Extension Methods Best Practices (Extension Methods Part 6)
- 1. Ersetzen Sie die Implementierung einer "versiegelten" Klasse
- 2. Mocking eine Methode, die eine versiegelte Klasse in RhinoMocks gibt
- 3. Wie lautet die LINQ'sche Methode?
- 4. Wie man die Methode einer Klasse aufruft, wenn eine andere Methode der Klasse aufgerufen wird (Ruby)
- 5. Wann ist die Verwendung einer Erweiterungsmethode eine gute Methode?
- 6. Erweiterungsmethode für eine Methode C#
- 7. Java macht eine Methode, die das gleiche tut wie str.indexOf() aus der java.lang.string Klasse
- 8. Wie lautet die Namenskonvention für die Factory-Methode?
- 9. Wie kann man eine Nummer für die gleiche Klasse erhöhen?
- 10. Implementieren Sie eine Methode der abstrakten Klasse, wenn die aktuelle Klasse bereits eine andere Klasse erweitert
- 11. Wie "erben" eine Methode, wenn die Klasse bereits eine übergeordnete Klasse
- 12. Übergeben einer Erweiterungsmethode an eine Methode, die einen Delegaten erwartet. Wie funktioniert das?
- 13. Activator.CreateInstance mit privaten versiegelten Klasse
- 14. Wie initialisiert man eine Instanz der inneren Klasse, wenn die innere Klasse in der Methode der äußeren Klasse deklariert wird?
- 15. Wie eine Funktion Signatur für eine Methode in einer Template-Klasse typedef wobei die Parameter ein generischer Typ ist
- 16. Wie ändert man die generische Signatur der Java-Klasse?
- 17. Wie lautet die CSS-Syntax für eine benannte Span-Klasse, die in einem Div verschachtelt ist?
- 18. Wenn eine in der Klasse eingebettete Funktion die "Methode" der Klasse ist?
- 19. Wie verwendet eine Klasse eine Methode, die in Java in einer anderen Klasse definiert ist?
- 20. Wie lautet die Paket-ID für eine iOS-App?
- 21. Warum akzeptiert die Funktion std :: eine Referenz in der Signatur?
- 22. So implementieren Sie die Erweiterungsmethode in der abstrakten Klasse
- 23. Klasse Implementieren von zwei Schnittstellen, die die gleiche Methode definieren
- 24. Wie lautet die Anzahl der Datensätze, wenn 1 zurückgegeben wird?
- 25. Warum brauchen wir eine Erweiterungsmethode, wenn die Vererbung bereits existiert?
- 26. Wie kann ich eine Klasse, die
- 27. Wie lautet die C++/CLI-Syntax zum Abonnieren von Ereignissen?
- 28. Was ist die generische Signatur einer Methode, die eine Instanz einer bestimmten Unterklasse zurückgibt?
- 29. Wie lautet die Standardcodierung der JVM?
- 30. Wie wird eine generische Erweiterungsmethode dynamisch aufgerufen?
HA HA! Monkey-Patch ... das ist neu. Ok, danke, ich dachte, wenn ich richtig liege, würde es versiegelt werden und das würde den ganzen Punkt besiegeln. –
@ Scott - auch bekannt als Enten-Stanzen. Das ist kein Scherz. –