Delphi Tips 
-----------------------------

0259  D1   D2   D3   D4   D5   D6   D7   3.1   95   98    作成: 1999/09/15 osamu rev 1.1
   B1   B3   B4   B5   B6   B7   NT3   NT4   2K   XP  更新: 1999/09/15 osamu 編集
子に override されたメソッドを孫クラスから呼び出す

TClassA というクラスがあって、TClassB がその子供 TClassC がさらにその子供であるとします。
TClassB が override した TClassA の手続き AProc を、TClassB 内から呼び出すには、inherited AProc; と書けば良いのは皆さんご存知だと思いますが、TClassC の中から呼び出すにはちょっとしたテクニックが必要になります。

type
TClassA = class
  protected
    procedure AProc; virtual;
end;

TClassB = class(TClassA)
  protected
    procedure AProc; override;
end;

とし、

type
TClassC = class(TClassB)
  protected
    procedure AProc; override;
end;

という場合です。これには、ダミーのクラス TClassD を使って、以下のようにします。

procedure TClassC.AProc;
type
    TClassD = class(TClassA) end;    {4番目のダミークラス}
    TAProc  = procedure of object;   { AProc の型 }
var
    method: TMethod;
begin
    with method do begin
        Data := Self;
        Code := @TClassD.AProc;
    end;
    TAProc(method);

    //  TClassC 特有の処理
end;

スコープをうまく操作して「Delphi を騙してる」感じです。
参照: [Delphi-ML:2958] [Delphi-ML:34246] <PASCAL>

[新規作成] [最新の情報に更新]

How To
Lounge
KeyWords


Tips
Delphi
Home
Osamu Takeuchi osamu@big.or.jp