Soll bedeuten, ich muss in meinem Quelltext mindestens einen String mit dem Inhalt 'Derp' und 'Lebensmittel' ablegen.
Das verstehe ich gerade nicht... wofür willst du das denn benutzen?
Mal ein Beispiel:
Delphi-Quellcode:
type
ColorElementAttribute = class(TCustomAttribute)
private
var
FColor: TColor;
procedure SetColor(const Value: TColor);
public
constructor Create(const AColor: TColor);
property Color: TColor read FColor write SetColor;
end;
constructor ColorElementAttribute.Create(const AColor: TColor);
begin
FColor := AColor;
end;
procedure ColorElementAttribute.SetColor(const Value: TColor);
begin
FColor := Value;
end;
Und im Formular mit zwei Buttons und zwei Memos:
Delphi-Quellcode:
TFormX = class(TForm)
Button1: TButton;
Button2: TButton;
[ColorElement(clRed)]
Memo1: TMemo;
[ColorElement(clBlue)]
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
end;
procedure TFormX.Button1Click(Sender: TObject);
var
LCtx: TRttiContext;
LField: TRttiField;
LAttr: TCustomAttribute;
begin
for LField in LCtx.GetType(Self.ClassInfo).GetDeclaredFields do
for LAttr in LField.GetAttributes do
if LAttr is ColorElementAttribute then
SetPropValue(LField.GetValue(Self).AsObject, 'Color', ColorElementAttribute(LAttr).Color);
end;
Wenn ich den Namen des Attributes ändere, kompiliert das nicht mehr. Und in deinem Fall könnte das z.B. eine Enumeration sein, dann brauche ich auch da keinen String, das könnte dann auch beim Kompilieren geprüft werden.