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

时间:2014-07-23 09:28:51

标签: delphi

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

1 个答案:

答案 0 :(得分:6)

  

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

documentation解释了如何处理此方案:

  

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

因此,在问题的方案中,DIAGRAM指的是Unit2中定义的符号。这是因为uses子句列出了最后列出Unit1, Unit2Unit2的单位。如果您颠倒uses子句Unit2, Unit1中的顺序,则DIAGRAM会引用Unit1中定义的符号。

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

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