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