2009-09-20 11 views

Respuesta

7

Bueno, tendría que ser virtual a ser posible anularlo (escribiendo un tipo dinámico que hereda de la clase), y no se puede tener un private virtual (no tiene sentido). Quizás pueda anular un internal virtual, pero sospecho que incluso esto puede afectar a los problemas de seguridad. Entonces, finalmente, yo diría que no.

1

No utilizando Reflection. Necesita usar algún tipo de AOP.

5

No utilizando solo Reflection. Quizás lo mejor que podría hacer es usar Reflection, combinado con Reflection.Emit o CodeDom para duplicar la clase en un nuevo espacio de nombres. Cuando encuentre el método privado que desea reemplazar, no lo copie, emite su reemplazo.

Sin embargo, hay muchas técnicas que puede usar un desarrollador que hacen que esta técnica sea mucho, mucho más difícil. Romper la implementación de la clase en muchas clases privadas o internas es una de ellas.

Nota: usando el CodeDom usted tendría que construir el gráfico en la memoria, compilarlo y luego cargar el ensamblaje resultante.

Esto es probablemente MUCHO más problema de lo que vale.

La otra forma de hacerlo sería usar Reflector para desmontar la clase, tomar el código y crear su propia clase con el método replace. Una vez más, existen importantes obstáculos técnicos y legales que superar. Sin embargo, puede aprender mucho del código desmontado.

+0

... o puede que no sepa nada, si el código está ofuscado. –

+2

de ustedes podría aprender que algún código está ofuscado :-) –

Cuestiones relacionadas