zoukankan      html  css  js  c++  java
  • 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.
    
  • 相关阅读:
    给博客园编辑器完善个插件及简单产品化工作
    在Visual Studio中新增生成项目
    用了三星Dex,我已经快一个月回家没开过电脑了
    BizTalk证书相关操作
    定长文本格式编辑神器
    B2B相关编码说明
    OFTP简介
    Apigee 简介与简单试用
    重置BizTalk RosettaNet
    BizTalk Map 累积连接字符串
  • 原文地址:https://www.cnblogs.com/del/p/1584401.html
Copyright © 2011-2022 走看看