【问题标题】:Generic Containers in DelphiDelphi 中的通用容器
【发布时间】:2009-12-10 00:29:26
【问题描述】:

我正在尝试这样做:

   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;

Where FindSenderIndex 函数(仍在实现)将返回 ASenderMyObj[i].Sender 匹配的项目的索引。但是在编译时我得到这个错误信息:"E2086 Type 'TList&lt;T&gt;' is not yet completely defined"

我做错了什么?提前致谢。

Pdta:你能给我一些关于如何使用对象容器(TObjectList&lt;T:class&gt;=class(TList&lt;T&gt;))的好例子吗?

【问题讨论】:

  • 我能问一下你为什么在这里使用类助手吗?为什么不这样做: TRecList = class(TList
  • 你说得对,我就是这么做的,我只是和 Helper 一起玩的。 :)

标签: delphi generics containers


【解决方案1】:

这看起来像是编译器中的一个错误。我能够在 Delphi 2010 下重现此问题。请在 QC 中报告。

不过,解决方法很简单。声明

TRecList = class(TList<TItemRec>);

相反,它可以工作。

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

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 2014-02-09
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 2012-05-09
    • 2011-09-18
    相关资源
    最近更新 更多