【发布时间】:2011-01-07 04:40:24
【问题描述】:
使用长单位文件名有什么实际好处吗? MyLib.MyUtils.pas 还是只是一种单位名称前缀?
【问题讨论】:
标签: delphi namespaces
使用长单位文件名有什么实际好处吗? MyLib.MyUtils.pas 还是只是一种单位名称前缀?
【问题讨论】:
标签: delphi namespaces
见:
Why does Delphi (dcc32.exe) have an option to set a “Namespace search path”?
Delphi 中的命名空间是编译器支持的,所以单元名中的点有特殊的含义。您可以使用文件的完整限定名,或者如果 dcc32.exe 选项设置正确,则可以使用“快捷方式”样式作为文件名。
所以你也可以写
uses
MyBestTools;
避免使用完整的限定名
uses
MyCompany.MyProject.MyLibrary.MyBestTools;
免责声明:目前这只是理论,但我会在不久的将来在一些项目中使用命名空间
如需更好的 IDE 支持,请随时在 QualityCentral 中投票支持此功能建议:
【讨论】:
-NS<namespaces> = Namespace search path 参数?
我编辑了这个答案以回应 cmets 和我对问题的明显误解。
我看到使用您所建议的单元名称的唯一实际好处是,IDE 将以比不使用“命名空间”前缀更好的方式对单元进行排序。我宁愿使用不同的文件夹。
在某些情况下,这可能是有意义的 - 因为名称冲突。例如,您可以有一个单元 MyLib.Utils 和一个单元 MyOtherLib.Utils 这确实可以避免一些混淆(对于 IDE 和您自己)。
您还可以使用带有静态类方法的抽象类来模拟命名空间:
type
Utils = class abstract
class procedure Beep; static;
end;
...
Utils.Beep;
【讨论】:
命名空间与所有标识符一样,旨在进行组织。
因此,使用它们,只有在您的项目以更好的方式组织时才会受益。 这个高度主观的问题(即使是最简单的命名约定也有“战争”!),所以不可能真正回答。
Here is some documentation 了解命名空间在 Delphi 中的工作原理。
请注意,“真正的”命名空间(其中多个通用 DLL 可以贡献给同一个命名空间;这就是命名空间在 .NET 世界中的作用方式)在 Delphi 中是不可能的:您可以采用 BPL 方式,但那是与“通用 DLL”不同。这不是 Delphi 本身的限制,而是 Windows 中本机 DLL 的“工作”方式。
--杰罗恩
【讨论】: