Delphi中的通用容器

时间:2009-12-10 00:29:27

标签: delphi generics containers

我正在尝试这样做:

   type
      TItemRec = record
        Sender    : TAction;
        OwnerPack : HModule;
        ChildForm : TForm;
      end;
      TRecList = TList<TItemRec>;

      THelperList = class helper for TRecList
        function FindSenderIndex(ASender: TAction): Int16;
      end;
   var
      MyObj : TRecList;

其中 FindSenderIndex 函数(仍然实现它)将返回 ASender MyObj [i] .Sender 匹配的项目的索引。但是在编译时我收到此错误消息:"E2086 Type 'TList<T>' is not yet completely defined"

我做得不好?提前谢谢。

Pdta:您能给我一些关于如何使用对象容器(TObjectList<T:class>=class(TList<T>))的好例子吗?

1 个答案:

答案 0 :(得分:5)

这看起来像编译器中的错误。我可以在Delphi 2010下重现这一点。请在QC中报告。

但解决方法很简单。声明

TRecList = class(TList<TItemRec>);

相反,它有效。

对于TObjectList<T>,它与TList<T>完全相同,只是它只接受对象,并添加了OwnsObjects属性。如果OwnsObjects设置为True,那么当您释放列表或调用ClearDelete方法时,它将释放从列表中删除的所有对象。