delphi - 在Delphi包中 "implicitly imported"总是坏事吗?

标签 delphi ide package custom-component

尝试将我的包裹重新排列为一组 TFrame-descendent components ,我发现似乎有必要将我的一些实用程序 TFrame 后代与使用它们的对话框窗体分开,主要是因为前者作为真正的组件注册到调色板,并且有时这似乎使 IDE 与使用它们的对话框形式。对话框表单依次由非可视组件调用,这些组件是第三个包的一部分。 到目前为止,这似乎构成了编译器的大部分 dependency-related complaints/困惑消失了。 (不过,我还没出去)。

使用对话框表单编译包(调用框架)时,我收到警告“Unit 'MyFrames' 隐式导入到包 'MyDialogForms' 中”

鉴于它显示为编译器警告,我很久以前就得到了这样的印象:“隐式导入”单元通常不是一件好事。是否有具体情况并非如此?即,在哪里隐式导入一个单元是可以的,和/或适当的做法?...如果是的话,那些具体情况是什么?

最佳答案

问题是这样的:

您的计划中的单元只能有一份副本。如果您尝试通过包加载同一单元两次,则会引发异常,并且包不会第二次加载。避免这种情况的方法是构建您的包,以便在其中多个包中不使用任何单位。

您编译的每个单元的代码都必须位于包中。编译器将从您在 contains 部分中声明的所有单元开始,但这些单元使用的任何其他单元也必须进行编译,以便可以访问,除非这些单元包含在另一个包中它列在要求下。这些额外的东西是“隐式导入”的单位。问题是,它们是隐式导入的,没有在包含部分明确说明,它们会方便地显示在右侧的项目管理器中。这意味着您可能没有注意到您的设备位于一个包裹中,而最终将其放入另一个包裹中。然后,当您尝试运行程序并加载包时,事情就会崩溃。这就是编译器警告您的原因。

这是一个警告,而不是错误,这是有原因的。只要您了解系统的工作原理,使用隐式导入在技术上是安全的。请记住,无论您是否声明,这些单位最终都会出现在包装中。但话又说回来,由于无论您是否声明它们,它们最终都会出现在那里,因此正式添加它们可能会更简单,这样可以省去麻烦。

关于delphi - 在Delphi包中 "implicitly imported"总是坏事吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1215664/

相关文章:

如果非模态显示,delphi启动窗体不会触发计时器事件

delphi - 了解 Delphi 变量声明/初始化

delphi - 德尔福的指针类型转换

java - 包内的android studio文件夹

javascript - 构建 NPM 包的最佳开发工作流程是什么?

r - 使用 install_github 是否有必要首先创建文档以使 NAMESPACE 正确?

Java 与 Delphi Base64 编码

java - 使用 Repast Simphony 2.0 Eclipse 在关闭透视图和关闭应用程序后不再打开

java - 用于编写和运行 hadoop 作业的 IDE?

eclipse - 如何在 Eclipse 中编辑(运行时)类路径?