我正在使用Delphi 6.我创建了一个项目,Unit1并Unit2在其中添加了两个单元.
我有一个常量命名XML_DIAGRAM='Diagram_Data'为XML节点的常量,我也在单元中声明了相同的常量Unit2但是具有不同的值'Diagram_Name'并且我在主单元中使用了两个单元.我的问题是,当我访问常量时,XML_DIAGRAM它总是包含来自单位的常量值Unit2.
如果在多个单元中声明具有相同名称的常量,那么当用户发出请求时,Delphi如何决定从哪个单位获取常量?
我的代码:
unit Unit1;
const
DIAGRAM = 'Diagram_Data';
end.
Run Code Online (Sandbox Code Playgroud)
unit Unit2;
const
DIAGRAM = 'Diagram_Name';
end.
Run Code Online (Sandbox Code Playgroud)
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Unit1,Unit2;
Run Code Online (Sandbox Code Playgroud)
如果在多个单元中声明具有相同名称的常量,那么当用户发出请求时,Delphi如何决定从哪个单位获取常量?
该文档说明了如何处理此方案:
单位出现在uses子句中的顺序决定了它们的初始化顺序,并影响编译器定位标识符的方式.如果两个单元声明了具有相同名称的变量,常量,类型,过程或函数,则编译器将使用uses子句中最后列出的单元中的一个.(要从其他单元访问标识符,您必须添加限定符:UnitName.Identifier.)
因此,在问题的场景中,DIAGRAM指的是定义的符号Unit2.这是因为在使用条款中列出的顺序使用单位Unit1, Unit2和Unit2被列在最后.如果颠倒uses子句中的顺序Unit2, Unit1,则DIAGRAM引用中定义的符号Unit1.
该文档还说明了如何使用完全限定名称来明确您想要的符号.你会写Unit1.DIAGRAM或Unit2.DIAGRAM.
最后要说的是,在不同的单元中使用相同的名称会导致混淆.建议你找一种编写代码的方法来避免这种情况.