4

回到那里,当我使用 Delphi 2006 时,它是:

 uses System, SysUtils, StrUtils, Windows, Dialogs, WinApi;

但最近我们可以使用:

 uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics;

这种变化如何运作?他们是否将System.pasinto分开,System.*.pas或者他们是否创建了一个新的子句来在单个库中按类型分隔函数?

如何修改我的旧库以使其像这样工作?我想做一些类似的东西:MyLib.Logic、MyLib.Arrays、MyLib.NetWork 等。

4

3 回答 3

4

只需在 ide 中打开旧文件,然后在项目管理器中重命名单元即可。它会自动更改文件中的单位名称。

之后,打开并重新编译您的旧项目,以确保您引用了正确的单元名称。

这些点相对于下划线之类的唯一优势似乎是您可以在代码完成中获得匹配的“子库”列表。

任何点之前的部分都不应该被称为“命名空间”,因为它不像一个那样工作。

于 2013-04-04T20:20:43.483 回答
3

它们被称为namespaces,它们从 Delphi 7 左右就开始存在,当时他们正准备发布 Delphi 8(Delphi for .NET)。添加它们是为了支持 .NET 方面的事情。它们记录在Using Namespaces with Delphi中。

于 2013-04-04T19:40:42.833 回答
3

您遇到的称为Unit Scope Names。更改了各种 RTL 和 VCL 单元名称,以更好地区分哪些单元是特定于平台的,哪些是跨平台的。不仅单元名称使用命名空间,自 Delphi.NET 引入以来就一直存在,现在甚至单元文件名本身现在也使用命名空间,这是新的。

如果您不编写跨平台代码,那么我们鼓励您使用新语法:

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics

但是,如果您想编写跨平台代码,或者只需要维护遗留代码,则继续使用原始语法:

uses
  System, SysUtils, StrUtils, ...;

然后根据需要确保“Winapi”、“System”、“Vcl”、“Fmx”等前缀包含在 Project Options 的“Unit Scope Names”字段中。

于 2013-04-04T20:59:15.143 回答