使用长单元文件名如 MyLib.MyUtils.pas或者它只是一种单位名称前缀是否有任何实际好处?Delphi中的命名空间
回答
命名空间,像所有的标识符,是为了组织。
所以使用它们,只有在您的项目以更好的方式进行组织时才有好处。 这个非常主观的问题(即使是最简单的命名约定也有过'战争'!),所以不可能真正回答。
Here is some documentation关于名称空间如何在Delphi中工作。在Delphi中不可能使用'真'命名空间(其中多于一个通用DLL可以贡献相同的命名空间;这就是命名空间如何在.NET世界中运行):您可以使用BPL方式,但是与“通用DLL”不同。这不是Delphi自身的限制,而是Windows中本地DLL“工作”的方式。
--jeroen
我编辑了这个答案,以回应评论和我对问题的明显误解。
我在使用单位名称时看到的唯一实际好处是,IDE会以比没有“名称空间”前缀更好的方式对单元进行排序。我宁愿使用不同的文件夹。
在某些情况下,它可能是有意义的 - 因为名称冲突。例如,你可以有一个单元MyLib.Utils
和一个单元MyOtherLib.Utils
这确实可以避免一些混淆(对于IDE和你自己)。
您还可以使用抽象类静态类的方法模拟一个命名空间:
type
Utils = class abstract
class procedure Beep; static;
end;
...
Utils.Beep;
如果我理解Serg,他会问**单元名称内部的** **。 –
你可能是对的,因为问题不是很详细。我编辑了我的答案以反映这种可能性。 – jpfollenius
当然,问题是关于“虚线”的单位名称。据我所知,点是单位名称前缀中的另一个符号,仅此而已。例如,您不能编写“使用MyLib”来使用MyLib.MyUtils,或以任何其他方式使用“MyLib”标识符。 – kludg
参见:
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中投票以获取此功能建议:
我在IDE(Delphi 2009)中找到了相同的选项: Project/Options/Delphi编译器/默认命名空间,名称空间前缀 – kludg
在Delphi XE7 IDE中,它被称为“单元范围名称” – SoftDeveloper
@SoftDeveloper does XE7仍然有' NS
- 1. Delphi XE2的命名空间
- 2. Delphi中使用VCL的Shell命名空间扩展
- 3. 从匿名命名空间调用命名命名空间中的函数
- 4. 命名空间中不存在命名空间名称'Notify'Twilio.Rest
- 5. 全局命名空间中的命名空间C#
- 6. 命名空间路线中的未命名空间路线
- 7. 重命名命名空间
- 8. 命名空间中的类
- 9. C++中的命名空间
- 10. C++中的命名空间
- 11. Backbone.js中的命名空间
- 12. HBase中的命名空间?
- 13. C#中的命名空间#
- 14. c中的命名空间#
- 15. Javascript中的命名空间
- 16. Redis中的命名空间?
- 17. JSON中的命名空间
- 18. XSLT中的命名空间
- 19. XSLT中的命名空间
- 20. 命名空间中的
- 21. gulp中的命名空间
- 22. 命名空间中的XML
- 23. c中的命名空间#
- 24. 如何在Delphi中编写Windows Shell命名空间扩展?
- 25. 命名空间
- 26. 命名空间
- 27. 命名空间
- 28. 命名空间
- 29. 命名空间
- 30. C++命名空间....匿名命名空间是合法的?
+1有趣的链接。我甚至不知道Delphi中有“官方命名空间”。 – jpfollenius
看起来像doc文章是为Delphi.NET(dcuil文件等)编写的。 Embarcadero必须编辑它以记录Delphi for Win32命名空间。 – kludg
+1感谢您的链接...现在我正在寻找哪些版本的支持这些命名空间前缀的任何参考... –