Delphi 2010 新增功能之: Rtti 单元(5): 获取方法的更多信息


方法的更多信息是指: 方法类型、返回值、参数等.


unit Unit1;



interface



uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls;



type

  TForm1 = class(TForm)

    Memo1: TMemo;

    Button1: TButton;

    procedure Button1Click(Sender: TObject);

  end;



var

  Form1: TForm1;



implementation



{$R *.dfm}



uses Rtti,TypInfo;



procedure TForm1.Button1Click(Sender: TObject);

var

  ms: TArray<TRttiMethod>;

  m: TRttiMethod;

  mps: TArray<TRttiParameter>;

  mp: TRttiParameter;

begin

  Memo1.Clear;



  {先获取方法集合, 这里随便使用了 TButton 类}

  ms := TRttiContext.Create.GetType(TButton).GetMethods;

  for m in ms do

  begin

    {方法名称}

    Memo1.Lines.Add('方法名称: ' + m.Name);



    {方法类型: proceedure、function 等}

    Memo1.Lines.Add('方法类型: ' + GetEnumName(TypeInfo(TMethodKind), Ord(m.MethodKind)));



    {方法的返回值类型}

    if Assigned(m.ReturnType) then

      Memo1.Lines.Add('返回值: ' + GetEnumName(TypeInfo(TTypeKind), Ord(m.ReturnType.TypeKind)));



    {方法的参数列表}

    mps := m.GetParameters;

    if Length(mps) > 0 then

    begin

      Memo1.Lines.Add('参数:');

      for mp in mps do Memo1.Lines.Add(mp.ToString);

      //还可以通过 mp.ParamType 获取参数的数据类型

      //还可以通过 mp.Flags 获取参数的修饰符(譬如 var、const 等)

    end;



    Memo1.Lines.Add(EmptyStr);

  end;

end;



end.


 
   

你可能感兴趣的:(Delphi)