Attributes是Delphi中的一个特点。它用于对某些对象(如类、记录、接口等)进行注释,并携带一些RTTI用于查询
Attributes本身不会改变注释对象的任何行为
Attributes注释的对象必须是运行期可见的,如public或Published
声明一个Attributes类型,首先要继承自TCustomAttribute,并且不能是抽象对象
type
TMyAttribute = class(TCustomAttribute)
private
FValue: string;
public
property Value: string Read Fvalue Write FValue;
constructor Create(Const v: string); //带RTTI信息的Attributes时,必须要实现自定义的构造器
//并且构造器中的参数只能是常量或常量表达式
end;
//然后就可以用来注释了,简单的注释操作如下
[TMyAttribute('Msg')]
MyRec = record
...
end;
如果有两个Attributes的类名前缀相同,如TMyAtt和TMyAttribute, 在使用[TMyAtt]进行注释时,用到的是TMyAttribute 而不是TMyAtt
获取注释的RTTI信息
uses
System.RTTI;
function GetMyRecAttr: string;
var
LContext: TRttiContext;
LType: TRttiType;
LAttr: TCustomAttribute;
begin
LContext := TRTTIContext.Create; //创建上下文对象
LType := LContext.GetType(TypeInfo(MyRec));//获取MyRec的类型信息
try
for LAttr In LType.Attributes() do //遍历MyRec中的Attributes
if LAttr is TMyAttribute then
Writeln(TMyAttribute(LAttr).value);
except
Writeln('读取失败'); //使用try except结构
end;
end;