2013-09-30 30 views
2

虽然将一些应用程序从Delphi XE2移动到XE5,但我注意到列出了不再需要的许多单元。在界面中使用什么命令?

这进而导致我在整理使用接口这导致了我的问题部分。

是否有推荐的接口单元顺序?我知道他们被加载反向命令,但我应该由Usnit Scope组织它们。例如MyCompany。 *在开始或结束时列出?我应该把Vcl。 *之前系统。 *

更新

一般来说,我会包括我在实施单位,而不是接口。我更深入地了解是否有一个层次结构德尔福自己的单位...

例如,我遇到了一个问题,其中列出Windows单元之前 System.SysUtils更改所使用的DeleteFile的版本.. 。

明确的问题

应该使用的顺序是

WINAPI *,系统*,Vcl的。*,或者相反?

+4

*我知道他们是以相反的顺序加载*。你以为你知道,但你错了。他们按顺序处理。如果有名称冲突,则最后导入的胜者。我总是列出使用低级的第一,高级的最后。所以,首先是RTL,然后是VCL,然后是你的单位。而你的代码肯定会有层次结构。也尊重这一点。但是,你需要确定你想要遵循的规则。如果我们不知道订单更改对代码库的影响,我们该如何回答? –

+0

大卫 - 这就是我试图问的问题:-) –

回答

4

有与应用列表重构相关的一些风险:

  • 以后使用单位将覆盖使用较早(作用域)单位符号(methodsclassesvarsconsts,...)。

    这可以引入(或多或少)sublte错误到你的程序中。

  • 重排序单元可以更改运行段落的顺序,其中intializationfinalization段落。

也有一些优点:

  • 更快编译速度

  • 小的可执行文件(仅当任何除去单元具有initializationfinalization

  • 避免/预防用途圆圈(尽管使用圆圈常常是次优OOP设计的标志)

说了这么多,你的问题,更新后:

我倾向于这样做,大卫已经写了同样的事情:顺序从低层次向高层次的单位。

有些工具可以帮助您找到未使用的单位,并按照最佳顺序排列使用的单位。 (Peganza Icarus/PascalAnalyzerModelMaker

很难说什么编译器确实(特别是因为现在有多种编译器),但用最少的依赖关系把单位首先应使编译器更容易建立依赖关系树。

+0

为了去除未使用的单位,cnPack也有一个很好的自动工具。尽管我喜欢Pascal Analyzer告诉你哪些单元可以从接口切换到实现的方式。 – Alister

相关问题