Delphi RTTI按属性值设置值
发布时间:2020-12-15 09:26:17 所属栏目:大数据 来源:网络整理
导读:我有这样的课 TuserClass = classprivate FUtilisateurCode: string; FUtilisateurCle: string;public procedure SetCodeInt(ACode: string; AValue: string); published [CodeInt('2800')] property UtilisateurCode: String read FUtilisateurCode write F
我有这样的课
TuserClass = class private FUtilisateurCode: string; FUtilisateurCle: string; public procedure SetCodeInt(ACode: string; AValue: string); published [CodeInt('2800')] property UtilisateurCode: String read FUtilisateurCode write FUtilisateurCode; [CodeInt('2801')] property UtilisateurCle: String read FUtilisateurCle write FUtilisateurCle; end; procedure TuserClass.SetCodeInt(ACode: string; AValue: string); begin // what I want to is making this by RTTI to set good value to good CodeInt if ACode = '2800' then FutilisateurCode := AValue else if ACode = '2801' then FUtilisateurCle := AValue; end; 我想使用我的SetCodeInt程序来填充我的属性值,但我有问题. 解决方法
您需要一个自定义属性类:
type CodeIntAttribute = class(TCustomAttribute) private FValue: Integer; public constructor Create(AValue: Integer); property Value: Integer read FValue; end; .... constructor CodeIntAttribute.Create(AValue: Integer); begin inherited Create; FValue := AValue; end; 我选择将值设为一个看起来比字符串更合适的整数. 然后你定义像这样的属性: [CodeInt(2800)] property UtilisateurCode: string read FUtilisateurCode write FUtilisateurCode; [CodeInt(2801)] property UtilisateurCle: string read FUtilisateurCle write FUtilisateurCle; 最后,SetCodeInt的实现是: procedure TUserClass.SetCodeInt(ACode: Integer; AValue: string); var ctx: TRttiContext; typ: TRttiType; prop: TRttiProperty; attr: TCustomAttribute; codeattr: CodeIntAttribute; begin typ := ctx.GetType(ClassType); for prop in typ.GetProperties do for attr in prop.GetAttributes do if attr is CodeIntAttribute then if CodeIntAttribute(attr).Value=ACode then begin prop.SetValue(Self,TValue.From(AValue)); exit; end; raise Exception.CreateFmt('Property with code %d not found.',[ACode]); end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |