delphi - 我有两个单元,每个单元中有一个类,它们需要彼此才能发挥作用。如何避免循环引用?

标签 delphi delphi-xe2

我有 2 个类,ClassAClassB,每个类都有自己独立的单元,UnitAUnitB .

UnitA 使用UnitB。这允许 ClassA 调用 ClassB 的构造函数。然而,ClassB 的部分功能需要使用 ClassA 的方法。我无法使 UnitB 使用 UnitA,否则这会导致循环引用。我有什么选择可以允许 ClassBUnitB 内访问 ClassA 方法?

最佳答案

这很大程度上取决于这两个类需要如何相互使用。如果一个类在实现中使用另一个类,但不使用接口(interface),那么您可以将uses子句中的该单元从interface部分移至implementation部分。

无论哪种方式都可以:

UnitA;

interface

uses
  Classes, UnitB;

type
  TClassA = class(TObject)
  end;

...

.

UnitB;

interface

uses
  Classes;

type
  TClassB = class(TObject)
  end;

implementation

uses
  UnitA;

...

但是,如果两个类的接口(interface)相互依赖,那么您别无选择,只能将这两个类放在同一个单元中(并使用前向声明)。

UnitA;

interface

uses
  Classes;

type
  TClassA = class;
  TClassB = class;


  TClassA = class(TObject)
  end;

  TClassB = class(TObject)
  end;

...

在极少数情况下,您甚至可以将整个类定义移至实现。但是,如果您需要在其他地方实际使用该类,那么这就没用了。

UnitB;

interface

implementation

uses
  Classes, UnitA;

type
  TClassB = class(TObject)
  end;

...

根据复杂性,将公共(public)共享代码放在其自己的单独单元中也是常见的做法。例如常量、记录数组类型、全局变量等。该公共(public)单元不得使用任何其他这些单元。

关于delphi - 我有两个单元,每个单元中有一个类,它们需要彼此才能发挥作用。如何避免循环引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29906920/

相关文章:

delphi - 如何使用 Delphi Mocks 验证多个模拟期望?

delphi - 视觉组件在设计模式下不可见,无法在Fire Monkey中恢复

windows - 阻止 WM_DEVICECHANGE 调度

delphi - 接收 COM 事件,无需手动将 dispid 映射到方法

java - 如何在Delphi中将String转换为PWideString以供JNA使用

iphone - 火猴到 iPhone

delphi - 在调用 Canvas.DrawBitmap (Firemonkey) 之前对位图应用转换

delphi - 为什么我在 Delphi XE2 中收到错误缺少接口(interface)方法的实现?

delphi - 在满足条件之前暂停程序执行的更好方法是什么?

delphi - XE6 IDE 中缺少 TBindScope