Delphi中不同Unit中具有相同名称的常量

Rah*_*rma 3 delphi

我正在使用Delphi 6.我创建了一个项目,Unit1Unit2在其中添加了两个单元.
我有一个常量命名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)

Dav*_*nan 6

如果在多个单元中声明具有相同名称的常量,那么当用户发出请求时,Delphi如何决定从哪个单位获取常量?

文档说明了如何处理此方案:

单位出现在uses子句中的顺序决定了它们的初始化顺序,并影响编译器定位标识符的方式.如果两个单元声明了具有相同名称的变量,常量,类型,过程或函数,则编译器将使用uses子句中最后列出的单元中的一个.(要从其他单元访问标识符,您必须添加限定符:UnitName.Identifier.)

因此,在问题的场景中,DIAGRAM指的是定义的符号Unit2.这是因为在使用条款中列出的顺序使用单位Unit1, Unit2Unit2被列在最后.如果颠倒uses子句中的顺序Unit2, Unit1,则DIAGRAM引用中定义的符号Unit1.

该文档还说明了如何使用完全限定名称来明确您想要的符号.你会写Unit1.DIAGRAMUnit2.DIAGRAM.

最后要说的是,在不同的单元中使用相同的名称会导致混淆.建议你找一种编写代码的方法来避免这种情况.