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

3
我有一个主表单Form_Main
它创建了两个类的实例。
Candle_Data : TCandle_Data;
Indicator_2700 : TIndicator_2700;

为了使Indicator_2700正确计算其值,它必须在其方法内部从对象Candle_Data中访问蜡烛数据。因此,Indicator_2700如何访问Candle_Data内部的数据?Form_Main是否必须在构造函数时将其作为参数传递?
两个类声明都在其自己的单元文件中。
3个回答

2

TIndicator_2700 可以拥有一个属性,将其与其自身实例相关的 TCandle_Data 实例链接起来或者在需要访问数据的方法中提供该实例作为参数。

你可以在 Indicator_2700 的构造函数中传递 TCandle_Data 实例,并在结果实例中存储一个引用,直到需要使用它为止。


我认为这是反过来的(TIndicator需要TCandleData),但除此之外,回答很好(+1):属性和构造函数注入是显而易见的解决方案。 - jpfollenius
好的,我会修改答案,以免混淆。 - Steve Mayne

2
您可以使用以下(非穷尽)方法之一:
  1. 将对象引用作为参数传递给需要它的任何方法。当然,您需要获取Candle_Data,因此这种方法的适用性取决于调用者是谁。
  2. 将Candle_Data对象引用传递给其他对象的构造函数,然后将其存储在私有成员字段中。
  3. 将对象引用作为主窗体单个实例的公共属性,并通过该方式访问它。
我们没有足够的信息来建议哪种方法最好,但起点始终是优先考虑参数和本地变量而不是全局状态。

0
两个类声明在它们自己的单元文件中。 这意味着它们彼此无关。但是您仍然希望其中一个了解另一个。这听起来像一个小设计混淆,但并不一定是这种情况。 有多种解决方案,以下是其中三种,每种都有其自身的目的:
  • 如果两个类有共同的主题/主题(例如,在单元“Transport”中的TCarTAirplane),则将两个类放在同一个单元中。
  • 仅当两个单元表示不同的主题,但其中一个可能依赖于另一个时(例如,单元Transport使用单元FuelTCar需要TDiesel,但TDiesel不需要TCar), 可以在另一个单元中使用一个单元。这只能单向工作。Delphi通过编译器错误防止双向使用:“对'Fuel'的循环单元引用”。唯一的解决方法是在实现部分中使用第二个单元,但通常被认为是大忌。
  • 仅当基类具有共同的主题,但最终的派生类没有时(例如,所有交通工具类如TCarTAirplaneTHorse都使用TFuel,但TFoodTFuel的后代)仅由THorseTPerson使用时,在新单元中声明一个新的基类。
关于如何将这两个类链接在一起,请参阅已经给出的答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接