首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Delphi包中,“隐式导入”总是一件坏事吗?

在Delphi包中,“隐式导入”总是一件坏事吗?
EN

Stack Overflow用户
提问于 2009-08-01 02:12:43
回答 2查看 6.4K关注 0票数 19

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

使用对话框窗体(调用框架)编译包时,我收到警告"Unit 'MyFrames‘隐式导入包'MyDialogForms'“

考虑到它显示为编译器警告,我很久以前就有这样的印象:“隐式导入”一个单元通常不是件好事。是否有具体的情况不是这样的?也就是说,隐式输入一个单位是可以的,和/或适当的做法?如果是的话,这些具体案例是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-08-01 03:36:54

以下是问题所在:

程序中只能有一个单元的副本。如果您尝试通过包加载同一单元两次,它将引发异常,并且包不会在第二次加载。避免这种情况的方法是构建包的结构,这样就不会在其中的多个包中使用任何单元。

您编译的每个单元的代码都必须在包中。编译器将以您在中声明的所有单元开始包含部分,但是这些单元所使用的任何其他单元也必须在其中编译,以便可以到达,除非这些单元包含在下列出的另一个包中,需要。这些额外的是“隐式进口”单位。问题是,它们是隐式导入的,没有在contains部分中明确说明,在那里,它们将方便地显示在右侧的Project中。这意味着您可能没有注意到您的单位在一个包中,并最终将其放在另一个包中。然后,当你试图运行你的程序并加载包时,事情就会中断。这就是编译器警告你的原因。

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

票数 30
EN

Stack Overflow用户

发布于 2009-08-01 08:05:50

+1表示Mason's answer。隐式输入单元成为问题的地方是在一个大型项目上,在那里,要跟踪从任何地方连接到的单元变得更加困难。

到目前为止,我发现最好的方法是每个包都有一个文件夹,该文件夹包含包的所有文件。如果我看到“隐式导入”警告,我要么添加所需的包,要么将单元添加到包中。因此,所有单元都在包含它们的包中指定,并且它们都位于同一个文件夹中。我从不将文件夹添加到搜索路径中,因为每个项目都直接了解其所有文件。

这个结构实际上并不是很难维护,它可以保护您免受不同单元包含不同版本文件的问题的影响。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1215664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档