2009-09-20 9 views

Répondre

7

Eh bien, il faudrait virtual pour pouvoir le surcharger (en écrivant un type dynamique qui hérite de la classe), et vous ne pouvez pas avoir un private virtual (cela n'a pas de sens). Vous pourriez peut-être remplacer un internal virtual, mais je soupçonne que même cela peut affecter la sécurité. Donc finalement, je dirais non.

1

Pas en utilisant Reflection. Vous devez utiliser une sorte d'AOP.

5

Pas en utilisant Reflection seul. Peut-être que le mieux que vous pourriez faire est d'utiliser Reflection, combiné avec Reflection.Emit ou le CodeDom pour dupliquer la classe dans un nouvel espace de noms. Lorsque vous rencontrez la méthode privée que vous voulez remplacer, vous ne la copiez pas, vous émettez votre remplacement.

Cependant, il existe de nombreuses techniques qu'un développeur peut utiliser qui rendent cette technique beaucoup plus difficile. Rompre l'implémentation de la classe dans de nombreuses classes privées ou internes en est une.

Remarque: en utilisant CodeDom, vous devez générer le graphique en mémoire, le compiler, puis charger l'assembly résultant.

Ceci est probablement beaucoup plus de problèmes que cela en vaut la peine.

L'autre manière de le faire serait d'utiliser Reflector pour démonter la classe, prendre le code et construire votre propre classe avec la méthode replace. Encore une fois, il y a d'importants obstacles techniques et juridiques à surmonter. Vous pouvez apprendre beaucoup du code démonté cependant.

+0

... ou vous ne pouvez rien apprendre, si le code est obscurci. –

+2

de vous pourrait apprendre que du code est obfuscated :-) –

Questions connexes