掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
自動的にクラスの型を判別してCreateさせるには? (ID:3053)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
試してみればわかりますが、キャストはいりません。 そのためのクラス参照型です。 例えば、 type TClassBaseClass=class of TClassBase; TClassBase=class(TObject) public Data: String; constructor Create(AOwner: TComponent); dynamic;// override; end; TClassA=class(TClassBase) public constructor Create(AOwner: TComponent); override; end; TClassB=class(TClassBase) public constructor Create(AOwner: TComponent); override; end; implementation constructor TClassBase.Create(AOwner: TComponent); begin Data := 'unknown'; end; constructor TClassA.Create(AOwner: TComponent); begin inherited; Data := 'class is A'; end; constructor TClassB.Create(AOwner: TComponent); begin inherited; Data := 'class is B'; end; ----------------------------- という定義だとして、 var FactoryA: TClassBaseClass; FactoryB: TClassBaseClass; Obj: TClassBase; begin FactoryA := TClassA; FactoryB := TClassB; Obj := FactoryA.Create(Self); ShowMessage(Obj.Data); Obj.Free; Obj := FactoryB.Create(Self); ShowMessage(Obj.Data); Obj.Free; end; という呼び出しをすれば、ClassAとClassBがちゃんと使い分けられていることが解ります。 FactoryAとFactoryBの違いは、代入したクラスの違いしかないです。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.