我有一个这样的通用集合:

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做其他事情。

在德尔福有可能吗?

最佳答案

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

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

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

10-06 09:11