Utilisation des intercepteurs de méthodes virtuelles

De RAD Studio
Aller à : navigation, rechercher

Remonter à Attributs (RTTI)


Delphi XE a un nouveau type dans Rtti.pas, appelé System.Rtti.TVirtualMethodInterceptor. Ce type crée essentiellement une métaclasse dérivée dynamiquement à l'exécution qui redéfinit chaque méthode virtuelle dans l'ancêtre, en créant une nouvelle table de méthodes virtuelles et en la remplissant par des stubs qui interceptent les appels et les arguments. Quand la référence de métaclasse pour chaque instance de "l'ancêtre" est remplacée par cette nouvelle métaclasse, l'utilisateur peut alors intercepter les appels de fonctions virtuelles, changer les arguments à la volée, changer la valeur de retour, intercepter et supprimer des exceptions ou déclencher de nouvelles exceptions, ou remplacer entièrement l'appel de la méthode sous-jacente.

D'un point de vue conceptuel, c'est quelque peu similaire aux proxies dynamiques de .NET et Java. C'est comme être capable de dériver d'une classe à l'exécution, de redéfinir des méthodes (mais pas d'ajouter de nouveaux champs d'instances), puis de changer le type d'exécution d'une instance sur cette nouvelle classe dérivée.

Pour de plus amples informations, voir le blog de Barry Kelly sur http://blog.barrkel.com/2010/09/virtual-method-interception.html

Voir aussi