2010-01-20 47 views

回答

13

命名空间,像所有的标识符,是为了组织。

所以使用它们,只有在您的项目以更好的方式进行组织时才有好处。 这个非常主观的问题(即使是最简单的命名约定也有过'战争'!),所以不可能真正回答。

Here is some documentation关于名称空间如何在Delphi中工作。在Delphi中不可能使用'真'命名空间(其中多于一个通用DLL可以贡献相同的命名空间;这就是命名空间如何在.NET世界中运行):您可以使用BPL方式,但是与“通用DLL”不同。这不是Delphi自身的限制,而是Windows中本地DLL“工作”的方式。

--jeroen

+0

+1有趣的链接。我甚至不知道Delphi中有“官方命名空间”。 – jpfollenius

+1

看起来像doc文章是为Delphi.NET(dcuil文件等)编写的。 Embarcadero必须编辑它以记录Delphi for Win32命名空间。 – kludg

+0

+1感谢您的链接...现在我正在寻找哪些版本的支持这些命名空间前缀的任何参考... –

0

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

我在使用单位名称时看到的唯一实际好处是,IDE会以比没有“名称空间”前缀更好的方式对单元进行排序。我宁愿使用不同的文件夹。

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

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

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

如果我理解Serg,他会问**单元名称内部的** **。 –

+0

你可能是对的,因为问题不是很详细。我编辑了我的答案以反映这种可能性。 – jpfollenius

+0

当然,问题是关于“虚线”的单位名称。据我所知,点是单位名称前缀中的另一个符号,仅此而已。例如,您不能编写“使用MyLib”来使用MyLib.MyUtils,或以任何其他方式使用“MyLib”标识符。 – kludg

2

参见:

Why does Delphi (dcc32.exe) have an option to set a “Namespace search path”?

命名空间在Delphi是由编译器的支持,所以在单位名称的点具有特殊的意义。您可以使用该文件的完整限定名称,或者如果dcc32.exe选项设置正确,则可以对文件名使用“快捷方式”样式。

所以,你也可以写

uses 
    MyBestTools; 

,以避免完全限定名

uses 
    MyCompany.MyProject.MyLibrary.MyBestTools; 

免责声明:目前这是所有理论,但我会利用命名空间的一些项目IIN不久的将来

要获得更好的IDE支持,请随时在QualityCentral中投票以获取此功能建议:

Visualize the unit namespaces hierarchy in the IDE

+1

我在IDE(Delphi 2009)中找到了相同的选项: Project/Options/Delphi编译器/默认命名空间,名称空间前缀 – kludg

+0

在Delphi XE7 IDE中,它被称为“单元范围名称” – SoftDeveloper

+0

@SoftDeveloper does XE7仍然有' NS = dcc32的命名空间搜索路径参数? – mjn