Rtti 单元(5): 获取方法的更多信息

    技术2022-06-30  66

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

    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.


    最新回复(0)