我有一个泛型类型,如下所示,并希望通过创建TItem的后代创建一个工厂来生成IItem。进一步想要使用Parent TItem注册工厂,以便它可以生成在工厂注册的类型的多个子对象。我已经看到这个在TDictionary中注册的工厂完成但从未使用参数化类型。
Type
IItem<T> = interface (IInterface)
Function GetParent:IItem<T>;
Procedure SetParent(aItem:IItem<T>);
property Parent:IItem<T> read GetParent write SetParent;
end;
TItem<T> = class(TInterfacedObject,IItem<T>)
private
FParent : IItem<T>;
FData : T;
Function GetParent:IItem<T>;
Procedure SetParent(aItem:IItem<T>);
public
property Parent:IItem<T> read GetParent write SetParent;
Constructor Create(aParent:IItem<T>);
end;
我想使用一个TItemFactory,通过将类传递给构造函数来创建实现TITem后代的IITem。将从TItem中调用此工厂,因此只有在使用具体数据类型实例化TITem时才会知道T.我试图创建这个工厂类,但编译器拒绝我尝试使用泛型类型。我的问题是如何创建TItemFactory类并能够传入要创建的类。
我对此的看法是:
TItemClass = class of TItem<T>;
TItemFactory<T>= class (TObject)
Function getItem:IItem<T>;
constructor Create(AClass:TItemClass);
end;
然而,这不能编译,所以我必须走错路。