Delphi如何使用其他窗体中的类型?

2024-05-11

抱歉,这是一个非常新手的问题。

我正在对这个庞大的应用程序进行维护。它有5种不同的形式。我们将全局变量放在一个单元(uGlobal)中。但我似乎无法从数据单元(uData)访问它。

我有这个:

Unit uGlobal
type
TmyType: (alpha, beta);
...

Unit uGlobal

Stuff:  TmyType  <- error, undeclared indentifier

当我尝试将 uGlobal 放入 uData 的使用部分时,它抱怨循环引用。所以,这里有点无知。他们都在同一个项目中。这是使用 BDS 2006。


你有一个循环引用,因为你有东西uGlobal想要利用其中的东西uData反之亦然。循环引用是大型项目中的一个大问题,因为它们大大增加了复杂性 - 如果您有循环依赖项,它就会变得更像一个更大的单元。我怀疑在你的项目被认为是大型的之前还有很长的路要走,更不用说“大规模”了。 ;)

您有 2 种可能的解决方案:

  • 使用循环依赖,建立一个依赖weak, 和另一个strong.
  • 进行一些重新设计以完全消除问题。 (把事情分成更小的块。)

保持循环依赖

David 已经给出了答案:至少其中一个单元必须使用实施部分中的另一个单元。

  • A 使用 B 使用 A 是绝对不允许的,但是您可以将接口和实现部分视为几乎就像单独的单位本身(带有一堆特殊的引用规则)。
  • 所以问问你自己,每个sub-unit need?
  • If for example:
    • 你声明了一个类型uData interface并在其中引用了uGlobal interface,则界面为uGlobal needs uData并且需要相应的uses子句。
    • 如果有一个类型uData implementation在任何地方都被引用uGlobal,然后该声明在uData implementation必须移至界面部分。
    • 如果有一个类型uGlobal interface它必须仅从实现部分引用uData那么 use 子句在实现部分就可以了。
  • 如果您遇到不幸的情况,即在两个接口部分中都键入了另一个接口部分中的引用类型,那么您have to通过应用该技术来进一步模块化删除循环依赖.

删除循环依赖

消除循环依赖需要将您的单元分解为更易于管理的更小的单元。为此,您must了解依赖关系每个之间的things在您的应用程序中。 例如:

  • Suppose uGlobal声明 A 和 C
  • A依赖于C,但C不需要A
  • 还假设uData声明 B 需要 C
  • 但事实证明A也需要B
  • 这就是为什么你有循环依赖

在这种情况下,你所要做的就是在移动 C 处声明一个新单位。

  • 然后两个uGlobal and uData将使用uNewUnit
  • 但双方都不需要对方
  • 并且您的循环依赖将被完全删除。

免责声明

我并不以任何方式提倡你对 uGlobal 的做法。事实上,这是一个非常糟糕的主意,当您的项目开始变大时,它会在两个方面给您带来很大的麻烦。不幸的是,这个解释本身就是一个巨大的答案。

  • 使用全局变量是危险的,应该避免。
  • 使用像 uGlobal 和 uData 这样的“大倾销单位”也是危险的,而且你才刚刚经历过他们的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Delphi如何使用其他窗体中的类型? 的相关文章

随机推荐

  • 如何通过 Web3-react 保持 MetaMask 与 UI 的连接持久?

    我正在使用 web3 react 但我不知道如何在浏览器刷新时保持与 MetaMask 钱包的连接持续 这是代码 define the injectedConnectors const injectedConnector new Injec
  • java中初始化并返回一个字节数组

    在我的代码中 我必须将一个 bye 数组 byte temp null 传递给 函数在其内部分配并填充数据 后 从函数返回它仍然为空 我怎样才能找到一个 解决这个问题 请帮我 byte temp null ret foo temp bool
  • Rails 3.1 资源预编译 - 包含所有 javascript 文件

    我希望 Rails 3 1 能够获取更多我的资源进行预编译 特别是 编译文件的默认匹配器不会添加 js文件来自vendor assets javascripts 我可以将资产添加到config assets precompile列表 但这似
  • 需要帮助解决 Project Euler 问题 200 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在尝试制定一个算法来解决 We
  • 发布 ndb StructuredProperty _Message__decoded_fields

    我的问题 我正在尝试使用 POST 请求填充 GAE 中包含 ndb Structured Property 的数据存储模型 这个问题最近被问过但没有得到解答 如何 发布 ndb StructuredProperty https stack
  • mySQL 基于不同表的 SELECT(计数)更新表

    我有一个课程表和一个科目表 CLASS class id class name subject id date time imagine some rows here SUBJECT subject id subject name curr
  • 如何使 collectionViewCell 仅按高度自动调整大小?

    我使用collectionView的自动调整流布局的功能 self flow UICollectionViewFlowLayout alloc init self flow scrollDirection UICollectionViewS
  • 如何正确调整 R 中 ggplot 的各个方面的大小,包括图例?

    我在 ggplot2 中制作散点图 然后使用 ggsave 导出特定宽度和高度的 PDF 但是 图形图例永远不会使用 ggsave 正确调整大小 其边框不会留在绘图内 是否有另一种方法可以同时调整 ggplot 所有部分的大小以便于导出 我
  • 为什么 main() 中的 try-catch 不好?

    有人可以向我解释为什么在 main 方法中使用 try catch 来捕获未处理的异常被认为是不合适的吗 STAThread static void Main try Application Run new Form1 catch Exce
  • 如何检查 lib 文件?

    我有一个包含 390 个库的列表 需要将软件从实验室 CVI 移植到 Visual C 这些依赖关系快要了我的命 我无法导入所有这些 这太过分了 而且并非所有它们都是唯一的和 或根本可以加载 有没有一种简单的方法可以确定 lib 文件进行哪
  • 如何重新启动/重置 Jquery 动画

    如何在 jquery 中重置动画 例如 CSS block position absolute top 0 left 0 JS block animate left 50 top 50 如果我做 block stop 动画将停止 但我怎样才
  • HTML5 范围输入中的样式下限和上限填充

    正如所解释的here http www hongkiat com blog html5 range slider style IE 允许在 CSS 中设置下部和上部填充或轨道区域的样式 如下所示 The following only aff
  • 如果字符串包含列表中的单词,则返回与列表值相邻的值

    目前我有一组单元格 每个单元格在无用的信息中都有一个唯一的标识符 我还有这些唯一标识符的列表 以及每个标识符对应的值 我想做的是找到一个单元格包含哪个标识符 如果有的话 然后输出相应的值 下面是一个例子 https i stack imgu
  • 使用批量乘法的tensorflow的tensordot中的障碍

    我正在张量流中实现 RBM 使用小批量实现参数更新存在障碍 有2个张量 第一个张量的形状是 100 3 1 第二个张量的形状是 100 1 4 数字 100 是批次大小 所以我想将这些张量相乘 得到 100 3 4 张量 但是当我实现这样的
  • Bash:循环遍历字符串数组后无法读出带空格的字符串

    我正在使用循环读取数组的内容 该数组包含名为 music 的目录层次结构中的所有目录和文件 内容是 find 命令先前输出的字符串 这个想法是根据流派 艺术家和标题将 directory contents 中每个数组元素的完整目录路径分成子
  • 单元格的 Fieldnames 函数的等效项

    正如标题所说 只是想知道是否有一个函数可以用作字段名 http www mathworks co uk help matlab ref fieldnames html 但适用于单元格 所以如果我有类似的东西 a imread redsqua
  • 哪些编程语言不被视为高级语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在信息学理论中 我一直听到和读到有关高级和低级语言的内容 然而我不明白为什么这仍然相关 因为除了今天使用的汇编语言之外 没有任何 相关的 低级语
  • 使用 Android 创建 ZIP 文件

    如何从 XML 文件创建 ZIP 文件 我想以 XML 格式备份所有收件箱消息 并压缩 XML 文件并将其存储在SD card http en wikipedia org wiki Secure Digital 下面的代码解决了我的问题 p
  • 问:Google Photos Library API - 我不知道它是如何工作的,有人知道吗?

    我正在尝试通过 javascript 从 Google Photos 加载相册 但我不明白 api 是如何工作的 我开始阅读谷歌照片API https developers google com photos 但没有运气 是否有代码参考可以
  • Delphi如何使用其他窗体中的类型?

    抱歉 这是一个非常新手的问题 我正在对这个庞大的应用程序进行维护 它有5种不同的形式 我们将全局变量放在一个单元 uGlobal 中 但我似乎无法从数据单元 uData 访问它 我有这个 Unit uGlobal type TmyType