我在每个单元中有两个单元和一个类,需要彼此运行.如何避免循环引用?

Tom*_*ski 4 delphi delphi-xe2

我有2个班,ClassA并且ClassB,各自在自己的独立的单元,UnitAUnitB.

UnitA用途UnitB.这允许ClassA调用构造函数ClassB.ClassB's然而,部分功能需要使用ClassA's方法.我无法UnitB使用UnitA,否则这会导致循环引用.允许从内部ClassB访问ClassA's方法有什么替代方法UnitB

Jer*_*dge 8

这很大程度上取决于两个类如何相互使用.如果一个类在实现中使用另一个类而不是接口,那么您可以将uses子句中的该单元从该interface部分向下移动到该implementation部分.

这可以解决这个问题:

UnitA;

interface

uses
  Classes, UnitB;

type
  TClassA = class(TObject)
  end;

...
Run Code Online (Sandbox Code Playgroud)

.

UnitB;

interface

uses
  Classes;

type
  TClassB = class(TObject)
  end;

implementation

uses
  UnitA;

...
Run Code Online (Sandbox Code Playgroud)

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

UnitA;

interface

uses
  Classes;

type
  TClassA = class;
  TClassB = class;


  TClassA = class(TObject)
  end;

  TClassB = class(TObject)
  end;

...
Run Code Online (Sandbox Code Playgroud)

在极少数情况下,您甚至可以将整个类定义向下移动到implementation.如果您需要在其他地方实际使用该类,那么这将没有用.

UnitB;

interface

implementation

uses
  Classes, UnitA;

type
  TClassB = class(TObject)
  end;

...
Run Code Online (Sandbox Code Playgroud)

根据复杂性,通常的做法是将共同的代码放在它自己的独立单元中.例如常量,记录数组类型,全局变量等.这个公共单元不得使用这些单元中的任何其他单元.