博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rtti获取类的字段和属性和方法
阅读量:5239 次
发布时间:2019-06-14

本文共 2244 字,大约阅读时间需要 7 分钟。

通过 Rtti 单元的 TRttiContext(是个 record), 可以方便地获取类的方法、属性、字段的列表.

--------------------------------------------------------------------------------

unit Unit1;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type

  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

uses Rtti;

//TRttiContext.GetTypes

procedure TForm1.Button1Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
begin
  Memo1.Clear;
  for t in ctx.GetTypes do Memo1.Lines.Add(t.Name);
end;

//获取 TButton 类的方法

procedure TForm1.Button2Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
  m: TRttiMethod;
begin
  Memo1.Clear;
  t := ctx.GetType(TButton);
  //for m in t.GetMethods do Memo1.Lines.Add(m.Name);
  for m in t.GetMethods do Memo1.Lines.Add(m.ToString);
end;

//获取 TButton 类的属性

procedure TForm1.Button3Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
  p: TRttiProperty;
begin
  Memo1.Clear;
  t := ctx.GetType(TButton);
  //for p in t.GetProperties do Memo1.Lines.Add(p.Name);
  for p in t.GetProperties do Memo1.Lines.Add(p.ToString);
end;

//获取 TButton 类的字段

procedure TForm1.Button4Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
  f: TRttiField;
begin
  Memo1.Clear;
  t := ctx.GetType(TButton);
  //for f in t.GetFields do Memo1.Lines.Add(f.Name);
  for f in t.GetFields do Memo1.Lines.Add(f.ToString);
end;

//获取获取 TButton 类的方法集合、属性集合、字段集合

procedure TForm1.Button5Click(Sender: TObject);
var
  ctx: TRttiContext;
  t: TRttiType;
  ms: TArray<TRttiMethod>;
  ps: TArray<TRttiProperty>;
  fs: TArray<TRttiField>;
begin
  Memo1.Clear;
  t := ctx.GetType(TButton);

  ms := t.GetMethods;

  ps := t.GetProperties;
  fs := t.GetFields;

  Memo1.Lines.Add(Format('%s 类共有 %d 个方法', [t.Name, Length(ms)]));

  Memo1.Lines.Add(Format('%s 类共有 %d 个属性', [t.Name, Length(ps)]));
  Memo1.Lines.Add(Format('%s 类共有 %d 个字段', [t.Name, Length(fs)]));
end;

end.

 

 

转载于:https://www.cnblogs.com/hnxxcxg/archive/2013/03/02/2940570.html

你可能感兴趣的文章
GDT 与 LDT
查看>>
js下载文件方法与原理小分析
查看>>
angular2或angular4中使用ckplayer播放rtmp和m3u8视频直播流
查看>>
BZOJ1061[Noi2008] 志愿者招募
查看>>
用c++11封装win32界面库
查看>>
未能加载文件或程序集system.web.extensions解决方法
查看>>
别闯进Hybrid App的误区
查看>>
myeclipse对象输入“.”后不自动提示
查看>>
前端页面HTML 标签 CSS, JS总结
查看>>
poj 1160
查看>>
c语言-键盘扫描码
查看>>
折半查找、
查看>>
兼容IE的写法收集||bug修复
查看>>
python中的reverse
查看>>
cisco 交换机 IOS命令
查看>>
form表单提交的方法
查看>>
Ubuntu18.10创建软件图标
查看>>
菜鸟开启之路
查看>>
vector
查看>>
珠心算测验(0)<P2014_1>
查看>>