12
votes

Remplacer une méthode privée avec une réflexion

est-il possible de remplacer une méthode privée en utilisant la réflexion dans .NET 3.5?


0 commentaires

4 Réponses :


1
votes

pas à l'aide de la réflexion. Vous devez utiliser une sorte d'AOP.


0 commentaires

8
votes

Eh bien, il aurait besoin d'être virtuel pour être possible pour le remplacer (en écrivant un type dynamique qui hérite de la classe), et vous ne pouvez pas avoir de virtuel privé < / code> (cela n'a aucun sens). Vous pouvez peut-être remplacer un virtuel interne , mais je soupçonne même cela peut toucher des problèmes de sécurité. Si finalement, je dirais non.


0 commentaires

5
votes

pas en utilisant la réflexion seule. Peut-être que vous puissiez faire est d'utiliser la réflexion, combinée avec reflet.emit ou le codedom pour dupliquer la classe dans un nouvel espace de noms. Lorsque vous rencontrez la méthode privée que vous souhaitez remplacer, vous ne le copiez pas, vous émettez votre remplacement.

Cependant, de nombreuses techniques ont un développeur qui peut utiliser cette technique beaucoup, beaucoup plus difficile. Briser la mise en œuvre de la classe en de nombreuses classes privées ou internes est une telle.

Remarque: Utiliser le code de code que vous devez construire le graphique en mémoire, la compilez, puis chargez l'assemblage résultant.

Ceci est probablement beaucoup plus de problèmes que ce qu'il vaut.

L'autre moyen de le faire serait d'utiliser réflecteur pour démonter la classe , prenez le code et créez votre propre classe avec la méthode remplacée. Encore une fois, il existe des obstacles techniques et juridiques importants à surmonter. Vous pouvez en apprendre beaucoup du code désassemblé.


0 commentaires

1
votes

Typemock Isolator est censé pouvoir le faire, mais le fait à travers les API .NET Profiler (Selon Roy Osherove dans L'art du test de l'unité ).


0 commentaires