2010-02-20 1 views
13

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

13

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 ...?

+1

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. –

+1

@ Scott - auch bekannt als Enten-Stanzen. Das ist kein Scherz. –

5

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)

Verwandte Themen