掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
あるクラスと同じクラスをCreateしたいときに (ID:22730)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
Delphi 5 で開発していますので、それ以下のバージョンでは使えないかもしれません。 TA=class TB=class(TA) TB1=class(TA) TC=class(TB) TC1=class(TB1) TAClass = class of TA; ・・・などと、基本クラス「TA」に対し、いくつも派生したクラス群があります。 それでは、基本クラスである「TA」の実装部で、自分自身のコピーインスタンスが 必要になったとき、どうしています? 条件 ・TAの継承クラスは、それぞれ別のユニットに記述されている ・派生が多岐にわたるので、is 演算子等による比較は行いたくない。 (1)安全に、このような、自分自身のインスタンスを作成するメソッドを作成し、 以下の継承クラスには、すべて同じメソッドを準備させる。 function TA.CreateCopy:TA; virtual; begin Result := TA.Create; end; function TB.CreateCopy:TA; override; begin Result := TB.Create; end; (2)楽して、これ一つで済ませる。 function TA.CreateCopy: TA; begin Result := TAClass(ClassType).Create; end; (3)もしくは、メソッドすら用意せず、必要な場所で var aaa: TA; bbb: TB; begin ... aaa := TAClass(bbb.ClassType).Create; ... end; (2)も(3)も、宣言されているクラスや型ではなく、実体のクラス と同じものがクリエイトされることを確認しています。 (3)の場合、bbb の実体が TC とすると、aaa の実体も TC になり、 宣言された型のインスタンスではなく、実体(TC)と同じクラスが クリエイトされます でも、(2),(3)の書き方ができるなんて、今日初めて知った(^^ゞ もしよければ、「こんな方法もあるよ」というのも募集してみます。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.