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

Delphi-从另一个对象访问对象实例数据,delphi,Delphi,我有我的主要表格表单_Main 它创建两个类的两个实例 Candle_Data : TCandle_Data; Indicator_2700 : TIndicator_2700; 为了使指示器_2700正确计算其值,它必须能够从其一种方法内部访问obect candle_数据中的烛光数据。因此,指示符_2700如何访问Candle_数据中的数据?Form_Main是否必须在构造函数时将其作为参数传递 两个类声明都在各自的单元文件中。tinindicator_2700可以有一个属性将其链接到与其

我有我的主要表格<代码>表单_Main

它创建两个类的两个实例

Candle_Data : TCandle_Data;
Indicator_2700 : TIndicator_2700;
为了使指示器_2700正确计算其值,它必须能够从其一种方法内部访问obect candle_数据中的烛光数据。因此,指示符_2700如何访问Candle_数据中的数据?Form_Main是否必须在构造函数时将其作为参数传递


两个类声明都在各自的单元文件中。

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


您当然可以将
TCandle\u Data
实例传递到
Indicator\u 2700
的构造函数中,并将引用存储在生成的实例中,直到您需要它为止。

您可以使用以下任何一种(非穷举)方法:

  • 将对象引用作为参数传递给任何需要它的方法。当然,您需要掌握数据,因此这种方法的适用性实际上取决于调用方是谁
  • 将数据对象引用传递给另一个对象的构造函数,然后将其存储在私有成员字段中
  • 使对象引用成为主窗体的单个实例的公共属性,并以这种方式访问它
  • 我们并没有足够的信息来告诉您哪一个是最好的,但出发点总是选择参数和局部变量,而不是全局状态

    两个类声明都位于各自的单元文件中

    这表明两者都与对方无关。但你还是希望其中一个知道另一个。这听起来像是一个小的设计混乱,但不需要这样

    有多种解决方案,这里有三种,每种都有自己的目的:

    • 仅当两个类都有一个共同的主题/主题(例如,单元中的
      TCar
      TAirplane
      )时,才将两个类放在同一单元中
    • 仅当两个单元代表不同的主题时,在另一个单元中使用一个单元,但一个单元可能依赖于另一个单元(例如,单元
      运输
      使用单元
      燃料
      TCar
      需要
      tdisel
      ,但
      tdisel
      不需要
      TCar
      )。这只是单向的。Delphi防止以两种方式使用编译器错误:“循环单元引用到‘Fuel’”。唯一的解决方法是在实现部分使用第二个单元,但这通常被认为是一个大问题
    • 在新单元中声明一个新的基类,前提是基类有一个公共主题,但最终的子类没有(例如,
      TFuel
      被所有运输类使用,如
      TCar
      TAirplane
      THorse
      ,但
      TFuel
      的子类)仅由
      THorse
      TPerson
      使用

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

    我认为正好相反(
    tinindicator
    需要
    TCandleData
    ),但除了这个好答案(+1):属性和构造函数注入是显而易见的解决方案。好地方!我将修改答案,以免混淆。