仮想メソッド インターセプタの使用

提供: Appmethod Topics
移動先: 案内検索

属性:インデックス への移動


Object Pascal XE では、System.Rtti.TVirtualMethodInterceptor という新しい型が Rtti.pas に定義されています。基本的に、この型は、新しい仮想メソッド テーブルを作成し、呼び出しと引数をインターセプトするスタブをそのテーブルに入力することで、上位クラス内のあらゆる仮想メソッドをオーバーライドする派生メタクラスを実行時に動的に作成します。上位クラスの任意のインスタンスのメタクラス参照がこの新しいメタクラスで置き換えられると、ユーザーは、仮想関数呼び出しのインターセプト、引数のその場での変更、戻り値の変更、例外のインターセプトと抑制または新しい例外の発生、ベースとなるメソッドの呼び出しの完全な置き換えが可能です。

概念上、これは .NET や Java の動的プロキシに多少似ています。これは、実行時に派生クラスを作成し、メソッドをオーバーライドした後(ただし、新しいインスタンス フィールドは追加しない)、インスタンスの実行時型をこの新しい派生クラスに変更できるような機能です。

詳細は、Barry Kelly のブログ http://blog.barrkel.com/2010/09/virtual-method-interception.html を参照してください。

関連項目