Est-il possible de remplacer une méthode privée à l'aide de Reflection dans .NET 3.5?Substitution d'une méthode privée avec Reflection
Répondre
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.
Pas en utilisant Reflection. Vous devez utiliser une sorte d'AOP.
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.
Typemock Isolator est censé être en mesure de le faire, mais le fait à travers les API de profileur .NET (selon Roy Osherove dans The Art of Unit Testing).
- 1. N'importe quel moyen d'appeler une méthode privée?
- 2. Générer lambda avec Reflection Info
- 3. Substitution d'une méthode Setter et obtention d'informations
- 4. Substitution de la méthode de peinture DataGridViewTextBoxCell
- 5. Webservice Reflection Exception
- 6. Trouver un champ privé avec Reflection?
- 7. Appel de la méthode Validate() d'un contrôle à l'aide de Reflection
- 8. Méthode de substitution d'un élément dans un UserControl XAML?
- 9. Comment rendre une méthode privée dans une interface?
- 10. méthode privée 'split' appelée pour (Shoes :: EditLine): Shoes :: EditLine
- 11. Unix - substitution
- 12. Clearcase Config Spec avec branche privée
- 13. Comment vérifier si une méthode privée a été appelée avec l'argument attendu dans le test unitaire?
- 14. L'appel d'une méthode d'instance privée à partir d'une méthode de classe en Ruby
- 15. Java Reflection est égal à Question
- 16. Émulateur de terminal de Reflection - Intégration avec IE
- 17. C# liste variable privée
- 18. rails -: jointures assainissement/substitution
- 19. Inplace substitution de ConfigParser
- 20. Substitution de OnPaint
- 21. Création d'une galerie de photos privée avec Asp.Net MVC
- 22. Cryptage avec une clé privée RSA en Java
- 23. Substitution de AuthenticationProcessingFilter de Spring
- 24. Méthode anti-erreur pour obtenir une adresse IP externe (non privée) sur CakePHP?
- 25. À quoi sert Reflection dans .NET?
- 26. Python Regex combiné avec une substitution de chaîne?
- 27. Comment répéter une commande avec substitution dans Vim?
- 28. cartographie collection privée NHibernate couramment
- 29. Existe-t-il un moyen d'appeler une méthode Class privée à partir d'une instance dans Ruby?
- 30. Pourquoi pouvez-vous réfléchir et appeler une méthode (pas si) privée en Java et .Net
... ou vous ne pouvez rien apprendre, si le code est obscurci. –
de vous pourrait apprendre que du code est obfuscated :-) –