我有一个这样的通用集合:
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;