2016-07-29 60 views
8

有没有一种方法可以将Delphi中的嵌套枚举放入自己的命名空间中?Delphi中嵌套枚举的名称空间

此代码生成一个E2004:标识符重新声明,因为两个枚举都包含“未知”。

TMyType1 = class 
public type 
    TMyType1Enum = (unknown, val1, val2); 
public 
    constructor Create(); 
    ... 
end; 

TMyType2 = class 
public type 
    TMyType2Enum = (unknown, other1, other2, other3); // causes E2004 
public 
    constructor Create(); 
    ... 
end; 

在C++中的枚举元素的标识符均在目前存在的范围(TMyType1 ::未知和TMyType2 ::未知)。

除了预先或后缀标识符(MyType1EnumUnknown,MyType1EnumVal1,...,MyType2Enumunknown,...),是否有可能在Delphi中实现这样的功能?

+1

下面的答案是完美的,但是从一个编码标准点,前缀在Delphi中通常用于枚举。作为一个例子,请看'TFontStyle'。它的定义如下所示:'TFontStyle =(fsBold,fsItalic,fsUnderline,fsStrikeOut)' – Graymatter

回答

10

尝试$SCOPEDENUMS。从http://docwiki.embarcadero.com/RADStudio/en/Scoped_Enums_(Delphi)

type 
    TFoo = (A, B, Foo); 
    {$SCOPEDENUMS ON} 
    TBar = (A, B, Bar); 
    {$SCOPEDENUMS OFF} 

begin 
    WriteLn(Integer(Foo)); 
    WriteLn(Integer(A)); // TFoo.A 
    WriteLn(Integer(TBar.B)); 
    WriteLn(Integer(TBar.Bar)); 
    WriteLn(Integer(Bar)); // Error 
end; 
+0

FWIW,docwiki似乎已脱机,现在。但是可以在Delphi/RAD Studio附带的已安装帮助文件中找到相同的文档。我们无法链接到它,从这里。 –