如何在Delphi中扩展Generic Collection?

时间:2016-06-09 15:18:53

标签: delphi generics collections

我有一个像这样的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有可能吗?

2 个答案:

答案 0 :(得分:5)

您知道如何扩展泛型集合TObjectDictionary,因此在扩展泛型集合TFooCollection时只需应用相同的技术即可。 TObjectDictionary本身不指定类型 - 您需要为其两个泛型类型参数提供值。一个您硬编码为string的,另一个是您通过转发TFooCollection中收到的通用类型参数提供的。

同样,在为TBarCollection指定基本类型时,您可以为TFooCollection类型参数提供硬编码值,也可以从TBarCollection转发参数。你可能想要做后者:

type
  TBarCollection<T: TBar> = class(TFooCollection<T>)
  end;

答案 1 :(得分:0)

请记住,在泛型类中,类型声明是类型名称的一部分。 编译器非常正确,说明您没有定义TFooCollection类型。您已经定义了一个名为TFooCollection(或TFooCollection)的类型。