【问题标题】:Objects in a list needs to access parent list properties列表中的对象需要访问父列表属性
【发布时间】:2014-08-24 17:42:36
【问题描述】:

这是 Delphi 的设计问题。

一个对象 A 包含一组变量,同时存储了一个类型 B 的对象列表。类型 B 的对象需要访问容器对象 A 中的公共变量。一个选项是对象 B 持有一个引用容器对象 A 但这似乎导致将对 A 的引用存储为 TObject 并且每次都对对象 A 进行封装以访问变量。还有其他可能的设计解决方案吗?

Object B
  // Possible solution
  ref to Object A

Object A
  x : integer
  list of B

每个 B 都需要访问 x

【问题讨论】:

  • 是什么阻止你这样做?这是非常微不足道的。只需声明一个变量并在创建它时将该变量分配给它的父级。
  • 我知道,但我不想每次都投射。无论如何,答案在我发布问题几分钟后就出现了,但大卫赫弗南很快就发布了答案。

标签: delphi


【解决方案1】:

你需要一个前向类型声明:

type
  TContainer = class; // forward declaration

  TItem = class
  private
    FContainer: TContainer;
    ....
  end;

  TContainer = class
  private
    // list of items
  end;

前向声明可以是容器或项目,哪个都没有关系。

在文档中阅读所有相关信息:http://docwiki.embarcadero.com/RADStudio/en/Classes_and_Objects#Forward_Declarations_and_Mutually_Dependent_Classes

【讨论】:

  • 在我发布问题后,我得到了典型的答案。这个故事的寓意是,不要只考虑答案可能是什么,而是在我的情况下将问题画在纸上,然后解决方案就会跳出来。尽管如此,还是值得提醒读者,包括我自己,关于前向声明。
猜你喜欢
  • 2012-11-22
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
相关资源
最近更新 更多