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 an zweiter Stelle stehen würde - das heißt, die Methode in der versiegelten Klasse wird aufgerufen. Wenn dies der Fall ist, wie können Sie die versiegelte Klasse erweitern?
Antworten
Zu viele Anzeigen?In der Tat, die aktuell Methode hat Vorrang vor der Erweiterungsmethode. Und nur um das klarzustellen - die "Reihenfolge der Ausführung" legt nahe, dass beide aufgerufen werden können; nur wird die ursprüngliche Methode aufgerufen. Vielleicht wählen Sie einen anderen Namen / eine andere Signatur; Sie können keine Erweiterungsmethoden zum Monkey-Patch verwenden, wenn das Ihre Absicht ist.
Wenn es eine Basisklasse / Schnittstelle gibt (die der Typ implementiert), die nicht diese Methode haben, könnten Sie sie vielleicht dorthin verlegen...?
Verwenden Sie eine andere Methodensignatur. Erweiterungsmethoden bedeuten, dass Sie die versiegelte Klasse um neue Funktionen erweitern und nicht die bereits implementierten überschreiben.
Erweiterungsmethoden haben eine "hide-by-name"-Semantik mit Instanzmitgliedern auf einem Typ. Das bedeutet, dass jedes zugängliche Instanzmitglied eines Typs immer alle Erweiterungsmethoden mit demselben Namen überschattet, selbst wenn die Erweiterungsmethode besser geeignet ist. Wenn also einem Typ ein Instanzmitglied mit demselben Namen wie eine Erweiterungsmethode hinzugefügt wird, kann die Erweiterungsmethode unaufrufbar gemacht werden.
Weitere Einzelheiten finden Sie in diesem Beitrag: Bewährte Erweiterungsmethoden (Erweiterungsmethoden Teil 6)