使用长单位文件名称,例如MyLib.MyUtils.pas,是否有实际效益,还是只是一种单位名称前缀?
命名空间就像所有标识符一样,旨在组织代码。
因此,只有当使用它们可以更好地组织您的项目时才会获得好处。这是一个高度主观的问题(甚至对于最简单的命名约定也可能发生争论!),因此无法真正回答。
这里有一些文档介绍Delphi中命名空间的工作方式。
请注意,在Delphi中不可能存在“真正”的命名空间(其中多个通用DLL可以为同一命名空间做出贡献;这就是命名空间在.NET世界中的功能方式)。您可以使用BPL方式,但这与“通用DLL”不同。这不是Delphi本身的限制,而是Windows中本地DLL的“工作”方式所致。
——jeroen
请参见:
Delphi(dcc32.exe)为什么有设置“命名空间搜索路径”的选项?
在Delphi中,编译器支持命名空间,因此单元名称中的点具有特殊含义。如果dcc32.exe选项设置正确,您可以使用文件的完全限定名称,也可以使用文件名的“快捷”样式。
因此,您也可以编写:
uses
MyBestTools;
uses
MyCompany.MyProject.MyLibrary.MyBestTools;
免责声明:目前这些都只是理论,但不久的将来我会在一些项目中使用命名空间
为了获得更好的IDE支持,请随意在QualityCentral中投票支持此功能建议:
我根据评论和对问题的明显误解修改了这个答案。
我唯一看到使用您建议的单元名称的实际好处是,IDE将以比没有“命名空间”前缀更好的方式对单元进行排序。我更喜欢使用不同的文件夹。
在某些情况下,由于名称冲突,这可能是有意义的。例如,您可以有一个单元MyLib.Utils
和一个单元MyOtherLib.Utils
。这确实可以避免一些混淆(对于IDE和您自己而言)。
您也可以使用具有静态类方法的抽象类模拟命名空间:
type
Utils = class abstract
class procedure Beep; static;
end;
...
Utils.Beep;
beeptools.Buzzer.makeNoise()
和Buzzer.makeNoise()
。 - mjn