delphi - 使用 Tcollection 在 delhi 中保存 vcl 对象引用

标签 delphi reference tcollection

我正在使用delphi 2009和VCL组件。我创建了一个名为的集合 TStreets 由项目组成 TStreet 只有两个私有(private)字段。现在我需要添加 到 Tstreet 类的另一个字段/属性来跟踪(通过使用引用) TMyObject 类的其他对象。

示例:假设 TStreet 集合包含五个元素和十个对象 (TMyObject) 在运行时存在于我的应用程序中。 TMyObject 的每个对象都可以属于 仅一个 TStreet,因此我需要为每个 TStreet 保存所有对象的引用和 然后能够将一个或多个对象引用从一个 TStreet 移动到另一个。 我应该在 TStreet 下创建另一个集合来保存对象引用吗?

这条路正确吗?

最佳答案

鉴于以下情况。

TMyObject = class
  ...
end;

TStreet = class
 ...
 public
   property MyObject : TMyObject ...;
end;

TStreets = TList<TStreet>;

从阅读你的问题来看,一个 TMyObject 只能绑定(bind)到一个 TStreet。

那么我建议反转引用。

TStreet = class;

TMyObject = class
protected
  FStreet : TStreet;
public
  property Street : TStreet read FStreet write FStreet;
end;

TMyObjectList = TList<TMyObject>;

TStreet = class
 private
   // Looks through MyObjectList returning correct 
   function GetMyObjecty : TMyObject; reference.
 public
   property MyObject : TMyObject read GetMyObject;
   // Reference to list that contains all instance of TMyObjectList.
   property MyObjectList : TMyObjectList; 
end;

TStreets = TList<TStreet>;

TMyObjectList = TList<TMyObject>;

关于delphi - 使用 Tcollection 在 delhi 中保存 vcl 对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4994167/

相关文章:

delphi - 如何实现Explorer和TcxShellListView之间的无缝剪贴板?

delphi - 为什么我不能在 Delphi 7 中启用主题的 TSpeedButtons 上设置字体?

delphi - WMI:如何区分内部 "local disk"HDD 和外部 "local disk"HDD

delphi - for all/for every 循环遍历 Delphi TCollection?

jquery - 如何使用 jQuery 和 "Long Polling"通过 Indy HTTP 服务器动态更新 HTML 页面?

python - 根据另一列拆分 csv 文件的一列

.net - VS.NET : Project Refs vs. 程序集引用

c++ - 澄清 C++ 中的引用

delphi - Delphi 中的持久多态列表

arrays - 从 Dll 返回 TCollection 或对象数组