Delphi - 从另一个对象访问对象实例数据

时间:2011-06-12 10:43:42

标签: delphi

我有我的主要表格。 Form_Main

它创建了两个类的两个实例。

Candle_Data : TCandle_Data;
Indicator_2700 : TIndicator_2700;

为了让Indicator_2700正确计算其值,它必须能够从其中一个方法中访问对象Candle_Data中的蜡烛数据。那么Indicator_2700如何访问Candle_Data中的数据呢? Form_Main是否必须在构造函数时将其作为参数传递?

两个类声明都在它们自己的单元文件中。

3 个答案:

答案 0 :(得分:2)

TIndicator_2700可以有一个属性将其链接到与其自己的实例相关的TCandle_Data实例,或者您应该将其作为参数提供给需要访问数据的方法。 / p>

您当然可以将TCandle_Data实例传递给Indicator_2700的构造函数,并在结果实例中存储引用,直到您需要它为止。

答案 1 :(得分:2)

您可以使用以下任何一种(非详尽的)方法:

  1. 将对象引用作为参数传递给任何需要它的方法。当然,您需要掌握Candle_Data,因此这种方法的适用性实际上取决于呼叫者是谁。
  2. 将Candle_Data对象引用传递给另一个对象的构造函数,然后将其存储在私有成员字段中。
  3. 使对象引用主窗体的单个实例的公共属性,并以此方式访问它。
  4. 我们实际上没有足够的信息来建议哪个是最好的,但起点始终是优先于全局状态的参数和局部变量。

答案 2 :(得分:0)

  

两个类声明都在它们自己的单元文件中。

这表明两者都与另一方无关。但是你仍然想要一个人知道另一个。这听起来像是一个小设计混淆,但不一定是这样。

有多种解决方案,其中有三种,每种解决方案都有自己的用途:

  • 将两个班级放在同一个单元中,但前提是这两个班级都有一个共同的主题/主题(例如TCarTAirplane单位Transport) ,
  • 在另一个单位中使用一个单位,但前提是两个单位代表不同的主题,但一个单位可能取决于另一个单位(例如单位Transport使用单位Fuel:{ {1}}需要TCar,但TDiesel不需要TDiesel)。这只适用于单向。 Delphi阻止在两种方式中使用编译器错误:“循环单元引用'Fuel'”。唯一的解决方法是在实现部分中使用第二个单元,但这通常被认为是一个很大的nono。
  • 在新单元中声明一个新的基类,仅当基类具有共同主题但最终后代不具有时(例如TCar被所有运输使用)类似TFuelTCarTAirplane的类,但THorseTFood的后代)仅由TFuel和{{1}使用})。

至于如何将两个类链接在一起,请参阅已经给出的答案。