通过 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.

rtti获取类的字段和属性和方法相关推荐

  1. java 获取父类的方法_java 获取类和父类的属性和方法

    问题 在日常开发中,经常需要获取当前类和父类的所有属性,没办法只能查API了. getDeclaredFields VS getFields 查阅API得知,class.getDeclaredFiel ...

  2. C# 面向对象编程(杂2),类中可能出现的成分,字段,属性,方法,自动属性,权限(五种),其他类,值传递和引用传递,类ToString的问题

    C# 面向对象编程(杂2),类中可能出现的成分 1. 字段,属性,方法,自动属性 class Person1 {//字段private string _name;//字段对应的属性public str ...

  3. C#中全局作用域的常量、字段、属性、方法的定义与使用

    场景 在开发中,经常会有一些全局作用域的常量.字段.属性.方法等. 需要将这些设置为全局作用域保存且其实例唯一. 注: 博客主页: https://blog.csdn.net/badao_liuman ...

  4. 面向对象(类的概念,属性,方法,属性的声明,面向对象编程思维

    1 面向对象 1.1 你是如何认识新事物的? 从过往的事物中总结事物的特点(特征),并比对新事物,把新事物进行归类. 1.2 类(Class)的概念(A) 类是对一组具有相同特征和行为的对象的抽象描述 ...

  5. drf之day05: 2个视图基类,GenericAPIView的属性和方法,基于APIView写5个接口,基于GenericAPIView写5个接口,5个视图扩展类,9个视图子类,视图集

    目录标题 一:2个视图基类 1.GenericAPIView的属性和方法 二:基于APIView写5个接口 三:基于GenericAPIView写5个接口 四:五个视图扩展类 1..基于Generic ...

  6. python 判断类是否存在某个属性或方法

    python 判断类是否存在某个属性或方法 #!/usr/bin/env python # -*- coding:utf-8 -*- #@Time : 2020/5/3 0003 12:47 #@Au ...

  7. 高阶Day1:面向对象,面向过程,类和对象的属性和方法创建

    高阶Day1:面向对象,面向过程,类和对象的属性和方法创建 高级编程学习4个内容: 面向对象 MySQL数据库 网络编程 并发编程 面向过程(POP)与面向对象(OOP): 类和对象: 类名的定义: ...

  8. 知识点 - python 类的私有/保护 属性和方法

    类的私有属性: __private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问. 在类内部的方法中使用时 self.__private_attrs. 类的方法: 在类 ...

  9. 潭州课堂25班:Ph201805201 第十课 类的定义,属性和方法 (课堂笔记)

    类的定义 共同属性,特征,方法者,可分为一类,并以名命之 class Abc: # class 定义类, 后面接类名 ( 规则 首字母大写 ) cls_name = '这个类的名字是Abc' # 在类 ...

最新文章

  1. linux-dash安装和使用
  2. 'objects' 报错问题
  3. 论文中常用的几个Word2010技巧
  4. 认清SQL_Server_2005的基于行版本控制的两种隔离级别
  5. LeetCode 548. 将数组分割成和相等的子数组(哈希set)
  6. 《PostgreSQL 指南:内幕探索》之基础备份与时间点恢复(上)
  7. openssl evp 对称加密(AES_ecb,ccb)
  8. 笔记本电脑黑屏但还在运作怎么办
  9. 数据治理为何越来越重要
  10. 2018年传智博客黑马程序员python人工智能培训就业班视频下载
  11. 从《征途》看互联网盈利模式的设计
  12. 微信编辑器的文章复制到公众号以后乱码怎么解决?
  13. 如何在电脑上将PDF文件转换成word?
  14. 自动化信任和依赖对航空安全的危害及其改进
  15. 用户一键登陆,如何实现?了解一下!
  16. 阿里云免费服务器,学生可以申请免费6个月!
  17. [架构之路-13]:目标系统 - 硬件平台 - 五种主流CPU架构的比较(CISC X86、RISC ARM、RISC PowerPC、RISC MIPS、RISC-V)
  18. 猫哥教你写爬虫 022--类与对象(下)
  19. 计算机win7不断重启,win7系统电脑一开机就自动重启的解决方法
  20. 安装Ubuntu后的配置

热门文章

  1. LINUX 下设置系统时间 DATE 命令
  2. Android基于Docker容器的双系统多开实现和自动化部署
  3. android 使用Photoshop获取图片某一点的颜色
  4. android:allowBackup=true 数据备份(adb backup)+查看(abe unpack backup.ab backup.tar)+恢复(adb re)
  5. setjmp和longjmp
  6. TextView 显示图像+文字的方法
  7. QTP对象TO与RO
  8. from torch._C import * ImportError: DLL load failed解决方法
  9. 解决Webview加载不完全导致部分js无效
  10. c++学习笔记之指针