2010-02-20 6 views
13

que estaba leyendo acerca de los métodos de extensión en C# 3.0. El texto que estoy leyendo implica que un método de extensión con la misma firma como un método en la clase está extendiendo sería el segundo en orden de ejecución - es decir, el método de la clase sellada se llama. Si este es el caso, ¿cómo se puede extender la clase sellada?Si un método de extensión tiene la misma firma como un método en la clase cerrada, lo que es la prioridad de llamadas?

Respuesta

13

De hecho, el método real tiene prioridad sobre el método de extensión. Y solo para dejarlo en claro: "orden de ejecución" sugiere que ambos puedan ser llamados; será invocada solamente el método original. Tal vez elegir otro nombre/firma; no puedes usar métodos de extensión para monkey-patch, si esa es tu intención.

Si hay alguna clase base/interfaz (que el tipo implementa) que no tiene tiene este método, ¿podría quizás lanzarlo allí ...?

+1

HA HA! Parche de mono ... es una nueva. Ok, gracias, estaba pensando que si estaba en lo correcto se rompería sellado y eso vencería el punto de usar sellado. –

+1

@Scott - también conocido como pato de perforación. No es broma. –

5

usar otro método de firma. Los métodos de extensión implican que está ampliando la clase sellada con nuevas funcionalidades y no anulando las que ya están implementadas.

Los métodos de extensión tienen una semántica "ocultar-por-nombre" con los miembros de instancia de un tipo. Esto significa que cualquier miembro de instancia accesible en un tipo siempre sombreará cualquier método de extensión con el mismo nombre, incluso si el método de extensión es mejor. Como resultado, si alguna vez se agrega un miembro de instancia a un tipo con el mismo nombre que un método de extensión, entonces el método de extensión puede volverse incable.

Para más detalles, echa un vistazo a este post: Extension Methods Best Practices (Extension Methods Part 6)

Cuestiones relacionadas