我有一个像这样的Generic集合:
TFoo = class;
TFooCollection<T: TFoo> = class(TObjectDictionary<string, T>)
procedure DoSomething;
end;
工作正常。
现在我需要像这样扩展 TFooCollection :
TBar = class( TFoo );
TBarCollection<T: TBar> = class(TFooCollection)
procedure DoSomethingElse;
end;
编译器抱怨TFooCollection没有定义。 由于TBar继承自TFoo,我想利用TFooCollection方法(可以使用TFoo和TBar项目)并使用TBar Collections做其他事情。
Delphi有可能吗?
答案 0 :(得分:5)
您知道如何扩展泛型集合TObjectDictionary
,因此在扩展泛型集合TFooCollection
时只需应用相同的技术即可。 TObjectDictionary
本身不指定类型 - 您需要为其两个泛型类型参数提供值。一个您硬编码为string
的,另一个是您通过转发TFooCollection
中收到的通用类型参数提供的。
同样,在为TBarCollection
指定基本类型时,您可以为TFooCollection
类型参数提供硬编码值,也可以从TBarCollection
转发参数。你可能想要做后者:
type
TBarCollection<T: TBar> = class(TFooCollection<T>)
end;
答案 1 :(得分:0)
请记住,在泛型类中,类型声明是类型名称的一部分。 编译器非常正确,说明您没有定义TFooCollection类型。您已经定义了一个名为TFooCollection(或TFooCollection)的类型。