16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル
"RE:クラス参照型変数をリストで持つ"
この発言は #00532 アイクビー さんの複数の派生クラスを配列で扱う に対するコメントです
この発言に対し以下のコメントが寄せられています
#00534 謎の全知師 さん RE^2:クラス参照型変数をリストで持つ
アイクビー さん、こんにちは。こういうのがVCL風かなと(^^;
type
TMyThread = class(TThread)
public
constructor Create(....); virtual; // ←注目
end;
TThread1 = class(TMyThread)
public
constructor Create(....); override; // ここで実装する
procedure Execute; override;
end;
TThread2 = class(TMyThread)
...
TMyThreadClass = class of TMyThread; // クラス参照型の宣言
var
ThClassList: TList;
ThList: TList;
// 基底型のコンストラクタ
constructor TMyThread.Create(YN: boolean);
begin
inherited Create(YN); // TThreadのコンストラクタを働かす
...... // 共通にやることがあればここで書いておく
end;
// 派生型のコンストラクタ
constructor TThread1.Create(YN: boolean);
begin
inherited Create(YN); // 共通部分の実行
......
end;
// スレッドの登録の例
procedure RegisterThread( ThClass: TThreadClass );
var
i: Integer;
begin
ThClassList.Add( ThClass );
// 自分で作った基底クラスの「クラス参照」にキャスト
ThList.Add( TMyThreadClass(ThClassList.Last).Carete( True ) );
end;
initialization
ThClassList := TList.Create;
ThList := TList.Create;
finalization
ThClassList.Free;
ThList.Free;
end.
> この場合のようにTThread.Createをいぢってない場合うまくいくのですが、派
>生クラスのCreateの引数の数や型が合わないとコンパイルできませんでした。引
>数が同じならうまくいくかどうかは試していないのでわかりません。
上記のようにvirtualにして,引数並びを同じにしてoverrideすればOK.
TN(CQJ01721)
Original document by TN 氏 ID:(CQJ01721)
ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。
Copyright 1996-2002 Delphi Users' Forum
|