如何在delphi单元中管理循环引用?

时间:2011-12-21 15:36:39

标签: delphi delphi-2010 circular-reference

我在AfterSignup单元中使用BeforSignup是为了能够从AfterSignup代码中调用电子邮件变量,最后我知道了一个问题,因为我想创建一个按钮,使用代码打开AfterSignup窗口:

 AfterSignup.Show;

但问题是我有义务将AfterSignup单元添加到BeforeSignup的使用列表中,这正是我无法做到的,因为我很喜欢使用BeforeSignup到AfterSignup单元。

我收到一个错误说,是圆形单位的参考。

2 个答案:

答案 0 :(得分:13)

简单的解决方案是在unitA的{​​{1}}部分的uses子句和interface unitB中添加unitB uses

implementation部分的子句

更好的解决方案是打破两个(或至少一个)单位的依赖性
您可以通过

打破依赖关系
  • 将所有来电从unitA移至unitA进入unitB
  • 使用unitB
  • 添加第三个共享代码单元

答案 1 :(得分:3)

如果单元的interface部分中的类型声明和变量声明需要另一个单元中的类或变量,那么您应该将所需的单元添加到接口部分的uses子句中。

但是,如果您只需要单元的implementation部分中的类和变量,在实现代码中,那么您应该仅将所需单元添加到实现部分中的uses子句中

如果您已在接口部分中引用了该单元,则不得在实现部分中再次包含该单元。

如果两个单元仅在实现部分中相互使用,则没有循环引用。您也可以混合使用,只要两个单元在接口部分(直接或间接)不相互使用,就不会有循环引用。

因此,基于您的问题,您似乎只应在实施部分中使用这些单元,并且不会有循环引用。