2016-07-29 22 views
8

Gibt es eine Möglichkeit, verschachtelte Aufzählungen in Delphi in einen eigenen Namensraum einzufügen?eigener Namespace für verschachtelte Aufzählungen in Delphi

Dieser Code erzeugt ein E2004: Identifier neu deklariert, da beide Aufzählungen "unbekannt" enthalten.

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; 

In C++ die Kennungen der Aufzählungselemente waren beide in untersch Bereiche (TMyType1 :: unbekannt und TMyType2 :: unbekannt).

Gibt es eine Möglichkeit, in Delphi so etwas zu erreichen, außer dass die Bezeichner (MyType1EnumUnknown, MyType1EnumVal1, ..., MyType2Enumunknown, ...) vor oder nachgestellt werden?

+1

Die Antwort unten perfekt ist, aber von einem Codierungsstandards Sicht sind Präfixe normalerweise in Delphi verwendet für Aufzählungen. Schauen Sie sich zum Beispiel 'TFontStyle' an. Die Definition sieht so aus: 'TFontStyle = (fsBold, fsItalic, fsUnderline, fsStrikeOut)' – Graymatter

Antwort

10

Versuchen Sie $SCOPEDENUMS. Von 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, das Docwiki scheint gerade offline zu sein. Die gleiche Dokumentation finden Sie in den installierten Hilfedateien von Delphi/RAD Studio. Von hier aus können wir einfach nicht darauf verweisen. –