Was findest Du daran unschön? Wenn man auf
RTTI verzichten will, könnte man das auch mit einer case-Abfrage in einer Funktion machen und auf die Konstante verzichten.
Delphi-Quellcode:
type
TMeinTyp = (mtEins, mtZwei, mtDrei);
function TMyClass.GetTypeAsString(Typ: TMeinTyp): string;
begin
case Typ of
mtEins:
Result := 'Typ Eins';
mtZwei:
Result := 'Typ Zwei';
else
Result := 'Typ Drei';
end;
end;
Aber: wenn man den Typ einmal erweitert, weil ein neuer Zustand hinzugekommen ist, darf man nicht vergessen, die Funktion auch zu erweitern. Dem Compiler ist das schnurz, ob sie im Fall des neuen Zustandes auch das richtige Ergebnis liefert. Hat man aber wie von Dir gezeigt eine entsprechende Array-Konstante deklariert, muss diese im genannten Fall auch erweitert werden, sonst wird nicht kompiliert, da das Array nicht die richtige Elementanzahl aufweist.
Delphi-Quellcode:
type
TMeinTyp = (mtEins, mtZwei, mtDrei);
const
MYTYPESTRINGS: array[TMeinTyp] of string = ('Typ Eins', 'Typ Zwei', 'Typ Drei');
function TMyClass.GetTypeAsString(Typ: TMeinTyp): string;
begin
Result := MYTYPESTRINGS[Typ];
end;
Ist doch prima, so kann man sich vor der eigenen Schusseligkeit schützen.