Delphi2009 反射机制的使用

Delphi2009中添加了一个用于实现反射的单元,即ObjAuto,用它可以轻松的实现反射。
对于原本的RTTI,只能够得到published区分符下的属性,而反射机制则可以得到拥有反射支持的类的公开方法,成员变量和属性。
下面是一个小例子:

首先写一个拥有反射支持的类,注意类必须继承自TPersistent,并且类声明带有MethodInfo编译预处理。
MethodInfo是一个全新的预处理指令,它标识了指定的类能否支持反射。

{$MethodInfo+}
type
TTestClass = class(TPersistent)
public
     procedure TestReflect(Astr: string);
     function Test2: Integer;
end;
{$MethodInfo-}

然后我们写一点代码,用于获取类中的方法,注意必须要uses中添加ObjAuto单元
var
test : TTestClass;
mia : TMethodInfoArray;
mi : PMethodInfoHeader;
begin
test := TTestClass.Create;
try
    mia := ObjAuto.GetMethods(test.ClassType);
    for mi in mia do
      ShowMessage(mi^.Name);
finally
    test.Free;
end;
end;

这段代码即可把类中公开的方法都获取出来。如果有属性的话,也是一样。
获取到的方法,也可以进一步通过反射机制来调用。

你可能感兴趣的:(Delphi2009 反射机制的使用)