Forum: Object-Pascal / Delphi-Language
by Zacherl,
1. Dez 2016
Natürlich kannst du dir die Funktion auch in deine bestehende Klasse einbauen. Wenn du dir allerdings Sorgen machst, dass du bei der Helper Klasse von mir zusätzliche Instanzen pflegen musst, dann kann ich dich beruhigen, da du die Funktion ganz einfach in der Form S := TEnumHelper<TMyEnum>.GetName(EnumValue) aufrufen kannst.
In deiner bestehender Klasse müsstest du dann die Funktion selbst...
Forum: Object-Pascal / Delphi-Language
by Zacherl,
1. Dez 2016
Guter Einwand :thumb: Keine Ahnung, warum ich das so umständlich gemacht hatte.
Forum: Object-Pascal / Delphi-Language
by Zacherl,
1. Dez 2016
Wir wollten dich nicht verunsichern, sondern nur auf eine mögliche Gefahr hinweisen. Ich würde es trotzdem folgendermaßen lösen:
type
TEnumHelper<TEnum> = record
public class function GetName(Value: TEnum): String; overload; static;
end;
{ TEnumHelper<TEnum> }
class function TEnumHelper<TEnum>.GetName(Value: TEnum): String;
var
Forum: Object-Pascal / Delphi-Language
by Zacherl,
1. Dez 2016
Einen Typ angeben musst du bei einer generischen Klasse ja sowieso zwingend. Das Problem ist, dass die Delphi Generics außer class und interface keine Constraints zulassen. Wobei Constraints eh nur ein Versuch sind ein viel prägnanteres Design-Flow abzuschwächen:
class procedure TGenericClass<TEnum>.Print(Enum: TEnum);
var
E: TEnum;
begin
for E := Low(Enum) to High(Enum) do
begin
...