Delphi中的名称空间

Delphi中的名称空间,delphi,namespaces,Delphi,Namespaces,使用像这样的长单位文件名有什么实际好处吗 MyLib.MyUtils.pas或者它只是一种单位名称前缀?我编辑了这个答案,以回应评论和我对这个问题的明显误解 我所看到的像您建议的那样使用单元名称的唯一实际好处是,IDE将以比不使用“名称空间”前缀更好的方式对单元进行排序。我更喜欢使用不同的文件夹 在某些情况下,这可能有意义——因为名称冲突。例如,您可以有一个unitMyLib.Utils和一个unitMyOtherLib.Utils,这确实可以避免一些混淆(对于IDE和您自己) 您还可以使用带有

使用像这样的长单位文件名有什么实际好处吗
MyLib.MyUtils.pas或者它只是一种单位名称前缀?

我编辑了这个答案,以回应评论和我对这个问题的明显误解

我所看到的像您建议的那样使用单元名称的唯一实际好处是,IDE将以比不使用“名称空间”前缀更好的方式对单元进行排序。我更喜欢使用不同的文件夹

在某些情况下,这可能有意义——因为名称冲突。例如,您可以有一个unit
MyLib.Utils
和一个unit
MyOtherLib.Utils
,这确实可以避免一些混淆(对于IDE和您自己)

您还可以使用带有静态类方法的抽象类来模拟命名空间:

type
  Utils = class abstract
    class procedure Beep; static;
  end;
...
Utils.Beep;   

名称空间和所有标识符一样,是用来组织的

因此,只有当你的项目以更好的方式组织起来时,使用它们才有好处。 这是一个非常主观的问题(甚至在最简单的命名约定上也发生了“战争”),因此不可能真正回答

关于名称空间在Delphi中的工作方式

请注意,Delphi中不可能使用“true”名称空间(其中多个通用DLL可以贡献给同一名称空间;这就是名称空间在.NET世界中的工作方式):您可以使用BPL,但这与“通用DLL”不同。这不是Delphi本身的限制,而是Windows中本机DLL的工作方式

--杰罗恩参见:

编译器支持Delphi中的名称空间,因此单元名称中的点具有特殊意义。您可以使用文件的完整限定名,或者如果dcc32.exe选项设置正确,则可以使用“快捷方式”样式作为文件名

所以你也可以写

uses
  MyBestTools;
避免使用完整的限定名

uses
  MyCompany.MyProject.MyLibrary.MyBestTools;
免责声明:目前这只是理论,但我将在不久的将来在一些项目中使用名称空间

要获得更好的IDE支持,请在QualityCentral中自由投票支持此功能建议:


如果我对塞格的理解是正确的,他会问关于单位名称内部(而不是后面)的点。你可能是对的,因为问题不是很详细。我编辑了我的答案以反映这种可能性。当然,问题是关于“虚线”单元名称的。据我所知,点只是单位名称前缀中的另一个符号,仅此而已。例如,您不能编写“uses MyLib”来使用MyLib.MyUtils,也不能以任何其他方式使用“MyLib”标识符。我编辑了答案。希望它现在更有用。@Serg:DCC32.exe有一个特殊选项来设置默认名称空间。因此,如果将默认名称空间设置为MyLib,则可以使用MyUtils。+1有趣的链接。我甚至不知道Delphi中有“官方名称空间”。看起来这篇文档是为Delphi.NET(dcuil文件等)编写的。Embarcadero必须编辑它以记录Win32命名空间的Delphi。+1感谢链接。。。现在我正在寻找任何版本支持这些名称空间前缀的参考…@jerrydoge根据我的记忆,Delphi7之后的任何Delphi版本都支持它。Delphi附带了Delphi.NET命令行编译器的预览版本,从那时起,每个Delphi.NET编译器都支持它,我认为任何本地Delphi编译器也支持它。我在IDE(Delphi 2009)中发现了相同的选项:Project/options/Delphi compiler/Default Namespace,命名空间前缀在Delphi XE7 IDE中被称为“Unit scope names”@SoftDeveloper XE7是否仍然具有dcc32的
-NS=Namespace search path
参数?@mjn是的,只是IDE选项名称发生了更改