【发布时间】:2018-01-11 15:31:34
【问题描述】:
我对 Delphi 中的泛型仍然有些模糊,但我一直在广泛使用 TObjectList<>。现在我有一种情况,我有一个具有这样一个私有字段的基类,但需要为任意类创建,该类也继承自另一个基类。
为了澄清,我有两个基类:
type
TItem = class;
TItems = class;
TItemClass = class of TItem;
TItem = class(TPersistent)
private
FSomeStuffForAllIneritedClasses: TSomeStuff;
end;
TItems = class(TPersistent)
private
FItems: TObjectList<TItem>;
FItemClass: TItemClass;
public
constructor Create(AItemClass: TItemClass);
destructor Destroy; override;
function Add: TItem;
...
end;
这对类然后被进一步继承到更具体的类中。我希望为所有对象共享对象列表,而每个对象实际上在内部都拥有不同的类型。
type
TSomeItem = class(TItem)
private
FSomeOtherStuff: TSomeOtherStuff;
...
end;
TSomeItems = class(TItems)
public
function Add: TSomeItem; //Calls inherited, similar to a TCollection
procedure DoSomethingOnlyThisClassShouldDo;
...
end;
现在的问题是在创建实际对象列表时。我正在尝试这样做:
constructor TItems.Create(AItemClass: TItemClass);
begin
inherited Create;
FItemClass:= AItemClass;
FItems:= TObjectList<AItemClass>.Create(True);
end;
但是,代码洞察力抱怨这一点:
未声明的标识符
AItemClass
更何况,编译器还有不一样的抱怨:
未声明的标识符
TObjectList
在哪里,我确实在这个单元中使用了System.Generics.Collections。
我在这里做错了什么,我应该怎么做?
【问题讨论】:
标签: delphi generics inheritance delphi-10.1-berlin