子に 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 を騙してる」感じです。 |
|