微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Delphi中扩展Generic Collection?

我有一个像这样的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做其他事情.

德尔福有可能吗?

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐