さまざまな種類のクラスインスタンスのリストがあります。何を作成するかを確実に知らなくても、クラスの新しいインスタンスを作成できる必要があります。関連するすべてのオブジェクトは同じ祖先を持っています。オブジェクトのメンバー変数の実際のコピーは簡単です...問題があるのは新しいオブジェクトの作成です。
確かに私はこのようなことをすることができました:
case MyObjectTypeInstance.MyTypeEnum of
obj1:
Result:=TObjectType1.Create;
obj2:
Result:=TObjectType2.Create;
obj3:
Result:=TObjectType3.Create;
end;
それは「開放/閉鎖原則」に従わないでしょう。
最初は、「Result:=MyObjectTypeInstance.Create;」のようなことができると思いました。しかし、それはデストラクタの問題のために期待どおりに機能しませんでした。
これが私がこれをどのように行うべきかについての最新の推測です...
var
fooA, fooB:TFoo;
begin
fooA:=TFoo2.Create; // it could be any of many types
fooB:=? // how to create fooB of same class type as fooA????
// do something
fooA.Free;
fooB.Free;
end;
これはもっと簡単だと思いました!
ご協力ありがとうございました!