rtti获取类的字段和属性和方法
通过 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获取类的字段和属性和方法相关推荐
- java 获取父类的方法_java 获取类和父类的属性和方法
问题 在日常开发中,经常需要获取当前类和父类的所有属性,没办法只能查API了. getDeclaredFields VS getFields 查阅API得知,class.getDeclaredFiel ...
- C# 面向对象编程(杂2),类中可能出现的成分,字段,属性,方法,自动属性,权限(五种),其他类,值传递和引用传递,类ToString的问题
C# 面向对象编程(杂2),类中可能出现的成分 1. 字段,属性,方法,自动属性 class Person1 {//字段private string _name;//字段对应的属性public str ...
- C#中全局作用域的常量、字段、属性、方法的定义与使用
场景 在开发中,经常会有一些全局作用域的常量.字段.属性.方法等. 需要将这些设置为全局作用域保存且其实例唯一. 注: 博客主页: https://blog.csdn.net/badao_liuman ...
- 面向对象(类的概念,属性,方法,属性的声明,面向对象编程思维
1 面向对象 1.1 你是如何认识新事物的? 从过往的事物中总结事物的特点(特征),并比对新事物,把新事物进行归类. 1.2 类(Class)的概念(A) 类是对一组具有相同特征和行为的对象的抽象描述 ...
- drf之day05: 2个视图基类,GenericAPIView的属性和方法,基于APIView写5个接口,基于GenericAPIView写5个接口,5个视图扩展类,9个视图子类,视图集
目录标题 一:2个视图基类 1.GenericAPIView的属性和方法 二:基于APIView写5个接口 三:基于GenericAPIView写5个接口 四:五个视图扩展类 1..基于Generic ...
- python 判断类是否存在某个属性或方法
python 判断类是否存在某个属性或方法 #!/usr/bin/env python # -*- coding:utf-8 -*- #@Time : 2020/5/3 0003 12:47 #@Au ...
- 高阶Day1:面向对象,面向过程,类和对象的属性和方法创建
高阶Day1:面向对象,面向过程,类和对象的属性和方法创建 高级编程学习4个内容: 面向对象 MySQL数据库 网络编程 并发编程 面向过程(POP)与面向对象(OOP): 类和对象: 类名的定义: ...
- 知识点 - python 类的私有/保护 属性和方法
类的私有属性: __private_attrs:两个下划线开头,声明该属性为私有,不能在类地外部被使用或直接访问. 在类内部的方法中使用时 self.__private_attrs. 类的方法: 在类 ...
- 潭州课堂25班:Ph201805201 第十课 类的定义,属性和方法 (课堂笔记)
类的定义 共同属性,特征,方法者,可分为一类,并以名命之 class Abc: # class 定义类, 后面接类名 ( 规则 首字母大写 ) cls_name = '这个类的名字是Abc' # 在类 ...
最新文章
- linux-dash安装和使用
- 'objects' 报错问题
- 论文中常用的几个Word2010技巧
- 认清SQL_Server_2005的基于行版本控制的两种隔离级别
- LeetCode 548. 将数组分割成和相等的子数组(哈希set)
- 《PostgreSQL 指南:内幕探索》之基础备份与时间点恢复(上)
- openssl evp 对称加密(AES_ecb,ccb)
- 笔记本电脑黑屏但还在运作怎么办
- 数据治理为何越来越重要
- 2018年传智博客黑马程序员python人工智能培训就业班视频下载
- 从《征途》看互联网盈利模式的设计
- 微信编辑器的文章复制到公众号以后乱码怎么解决?
- 如何在电脑上将PDF文件转换成word?
- 自动化信任和依赖对航空安全的危害及其改进
- 用户一键登陆,如何实现?了解一下!
- 阿里云免费服务器,学生可以申请免费6个月!
- [架构之路-13]:目标系统 - 硬件平台 - 五种主流CPU架构的比较(CISC X86、RISC ARM、RISC PowerPC、RISC MIPS、RISC-V)
- 猫哥教你写爬虫 022--类与对象(下)
- 计算机win7不断重启,win7系统电脑一开机就自动重启的解决方法
- 安装Ubuntu后的配置
热门文章
- LINUX 下设置系统时间 DATE 命令
- Android基于Docker容器的双系统多开实现和自动化部署
- android 使用Photoshop获取图片某一点的颜色
- android:allowBackup=true 数据备份(adb backup)+查看(abe unpack backup.ab backup.tar)+恢复(adb re)
- setjmp和longjmp
- TextView 显示图像+文字的方法
- QTP对象TO与RO
- from torch._C import * ImportError: DLL load failed解决方法
- 解决Webview加载不完全导致部分js无效
- c++学习笔记之指针