【问题标题】:How to manage circular references in delphi units?如何管理德尔福单元中的循环引用?
【发布时间】:2011-12-21 15:36:39
【问题描述】:

我在 AfterSignup 单元中使用 BeforSignup 以便能够从 AfterSignup 代码中调用 email 变量,最后我遇到了一个问题,因为我想制作一个使用代码打开 AfterSignup 窗口的按钮:

 AfterSignup.Show;

但问题是我有义务将 AfterSignup 单元添加到 BeforeSignup 的使用列表中,而这正是我不能做的,因为我已经使用 BeforeSignup 到 AfterSignup 单元。

我收到一条错误消息,说是循环单位的引用。

【问题讨论】:

标签: delphi delphi-2010 circular-reference


【解决方案1】:

简单的解决方案是在unitBinterface 部分的uses 子句中添加unitA,在unitAimplementation 部分的uses 子句中添加unitB /p>

更好的解决方案是打破两个(或至少一个)单元的依赖关系
您可以通过以下任一方式打破依赖关系

  • 将所有呼叫从unitA 移动到unitBunitB
  • 添加第三个共享代码单元,同时使用units A & B

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

    • 奇怪的是,据我所知,在 Delphi 10.4 中,即使在实现部分中使用了其中一个错误,我也会收到循环引用错误...
    猜你喜欢
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多