Je suis actuellement en train d'utiliser ce code, mais ne mentionne rien. Qu'est-ce qui me manque?Comment puis-je lister les attributs d'une propriété en utilisant le rtti?
program ListAttrs;
{$APPTYPE CONSOLE}
uses
Rtti,
SysUtils;
type
TPerson = class
private
FName: String;
FAge: Integer;
public
[NonEmptyString('Must provide a Name')]
property Name : String read FName write FName;
[MinimumInteger(18, 'Must be at least 18 years old')]
[MaximumInteger(65, 'Must be no older than 65 years')]
property Age : Integer read FAge write FAge;
end;
procedure test;
var
ctx : TRttiContext;
lType : TRttiType;
lAttribute: TCustomAttribute;
lProperty : TRttiProperty;
begin
ctx := TRttiContext.Create;
lType := ctx.GetType(TPerson);
for lProperty in lType.GetProperties do
for lAttribute in lProperty.GetAttributes do
Writeln(lAttribute.ToString);
end;
begin
try
Test;
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.
Merci beaucoup Mason. – Salvador
Pour ajouter à cela, si vous voulez utiliser des attributs personnalisés dans votre code et les rendre accessibles à RTTI, vous devez définir explicitement des classes d'attributs dans votre code. Il y a un chapitre entier dans la documentation de 2010 sur ce sujet: ms-help: //embarcadero.rs2010/rad/Attributes_Index.html –