Verwenden von virtuellen Methoden-Interzeptoren

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Attribute (RTTI)


Delphi XE enthält in der Unit Rtti.pas den neuen Typ System.Rtti.TVirtualMethodInterceptor. Im Wesentlichen erstellt dieser Typ dynamisch zur Laufzeit eine abgeleitete Metaklasse, die alle virtuellen Methoden im Vorfahren durch Erstellen einer neuen virtuellen Methodentabelle mit Stubs überschreibt, die Aufrufe und Argumente abfangen. Wenn die Metaklassenreferenz für eine beliebige Instanz des "Vorfahren" durch diese neue Metaklasse ersetzt wird, kann der Benutzer virtuelle Funktionsaufrufe abfangen, Argumente ad hoc modifizieren, den Rückgabewert ändern, Exceptions abfangen oder unterdrücken oder neue Exceptions auslösen, oder den Aufruf der zugrunde liegenden Methode vollständig ersetzen.

Das Konzept ähnelt den dynamischen Proxies aus .NET und Java. Es entspricht dem Ableiten einer Klasse zur Laufzeit, dem Überschreiben von Methoden (aber ohne Hinzufügen neuer Instanzfelder) und dem anschließenden Ändern des Laufzeittyps einer Instanz in diese neue abgeleitete Klasse.

Weitere Informationen dazu finden Sie im Blog von Barry Kelly unter http://blog.barrkel.com/2010/09/virtual-method-interception.html

Siehe auch