我有 2 个类,ClassA
和 ClassB
,每个类都有自己独立的单元,UnitA
和 UnitB
.
UnitA
使用UnitB
。这允许 ClassA
调用 ClassB
的构造函数。然而,ClassB 的部分功能需要使用 ClassA 的方法。我无法使 UnitB
使用 UnitA
,否则这会导致循环引用。我有什么选择可以允许 ClassB
从 UnitB
内访问 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/