2

在将一些应用程序从 Delphi XE2 迁移到 XE5 时,我注意到列出了许多不再需要的单元。

这轮到我整理界面的使用部分,这导致了我的问题。

界面中是否有推荐的单位顺序?我知道它们是以相反的顺序加载的,但我应该通过 Usnit Scope 来组织它们。

例如应该MyCompany。* 列在开头还是结尾?我应该放置Vcl。* 在系统之前。*

更新

一般来说,我会将我的 Units 包含在implementation而不是interface中。我正在更多地了解德尔福自己的单位是否存在层次结构......

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

明确的问题

使用顺序应该是

Winapi*、System.*、Vcl.* 还是相反?

4

3 回答 3

4

使用列表重构存在一些风险:

  • 稍后使用的单位将覆盖先前使用的单位的符号(methods, classes, vars, consts, ...)(范围)。

    这可能会(或多或少)在您的程序中引入微妙的错误。

  • intialization重新排序单元可以更改和finalization部分的运行顺序。

还有一些优点:

  • 更快的编译速度

  • 较小的可执行文件(仅当任何已删除的单元具有initialization或时finalization

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

话虽如此,在您的问题更新之后:

我倾向于做大卫已经写过的同样的事情:将单元从低级到高级排序。

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

很难说编译器到底做了什么(尤其是现在有多个编译器),但是首先放置依赖最少的单元应该会让编译器更容易构建依赖树。

于 2013-09-30T10:19:40.587 回答
3

阅读http://docwiki.embarcadero.com/RADStudio/XE3/en/Programs_and_Unitshttp://docwiki.embarcadero.com/RADStudio/XE5/en/Using_Namespaces_with_Delphi文章。这两篇文章准确地解释了您的问题。

于 2013-09-30T10:15:30.633 回答
0

TMS 软件是 Delphi 许多组件的作者 - 在他们的文中推荐以下顺序:

uses  
  // 1. fpc/lazarus/delphi units,  
  // 2. 3rd units,  
  // 3. my open source units,  
  // 4. project units  

在我看来,这实际上是最好的选择。您可以更改顺序。重要的是要记住,当函数/类名将在多个单元中使用时,将使用最后一个单元。

于 2019-01-21T14:03:05.177 回答