Podczas gdy Barry wyraźnie odpowiedział na twoje pytanie dotyczące atrybutów na elementach enum, wezmę ukłucie na inną sugestię. Z twojego przykładu, prefiksujesz każdy element enum z "tod", tak jak jest tradycyjnie w Delphi, ponieważ elementy enum mają zasięg globalny (tj. Jeśli masz identyfikator TodABC w zakresie oprócz elementów enum todABC, możesz uzyskać trochę dziwne zachowania).
Począwszy od D2007, wprowadziliśmy pojęcie "enopingu", które po włączeniu wymaga zakwalifikowania elementu wyliczeniowego z identyfikatorem samego enum. Na przykład:
{$SCOPEDENUMS ON}
type
TTypeOfData = (ABC,DEF,GHI);
Wymaga od użytkownika odwołania do elementu ABC jako TTypeOfData.ABC. Pozwala to na użycie niezamkniętych identyfikatorów elementów wyliczających i nie powoduje ryzyka wystąpienia konfliktów, ponieważ elementy są "ograniczone" do wyliczenia. Każde enum zadeklarowane, gdy włączone jest {$ SCOPEDENUMS}, będzie się zachowywać w ten sposób.
Biorąc pod uwagę, że można teraz bezpiecznie używać RTTI, aby uzyskać rzeczywiste nazwy elementów enum w pożądanym formacie.
Dobre wyjaśnienie na. Ale w tym przypadku IMO powinny one powodować ostrzeżenie "nieobsługiwanym językiem", tak jak robi to inne nieprawidłowe użycie atrybutów. –