gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 15:19:56 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com