Rtti单元(1)获取类的方法、属性、字段的列表

转载 2011年01月09日 20:06:00

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

Delphi 2010 新增功能之: Rtti 单元(5): 获取方法的更多信息

====================================================== 注:本文源代码点此下载 =============================...

c#学习摘录:类\继承\接口\字段、方法、属性\浅深复制(1)

public abstract class MyBase{}/*定义公开可继承类*/ internal class MyClass : MyBase{}/*定义内部类,并继承之上的类*/ public...

C#中类、属性、字段、方法举例

  • 2010年08月21日 19:22
  • 57KB
  • 下载

OTL 连接数据库,获取字段列表属性

获取表 字段列表 方法一:   OTL stream class 介绍       otl_strean 类 具体的实现了OTL 流的概念。任何的SQL语句、SQL语句块和存储过程都能通过ot...

通过反射获取类属性字段 以及 调用类方法

public class ModelClassHelper { public static HashMap init(String classPath) { try ...

c#类成员(字段、属性、方法、事件)

类成员 在C#中,类包含若干个组成成员,这些组成成员包括字段、属性、方法、事件等,这些组成成员能够彼此协调用于对象的深入描述。 1.字段 “字段”是包含在类中的对象的值,字段使类可以封装数据,字...

c#学习摘录:类\继承\接口\字段、方法、属性\浅深复制(4)

修改之上扑克牌代码: using System; using System.Collections; using System.Collections.Generic; using System.Li...

js—新的选择器、获取class列表属性、 JSON新方法

//新的选择器 querySelector、querySelectorAllwindow.onload = function(){ //var oDiv = document.querySele...

C#--反射使用Start!-获取对象的字段/属性/方法/成员/构造方法

前言: 学编程一年多,现在才真正开始用反射,有点晚了,但是用好反射真的很重要,算是很方便,这么久了不会用反射,其实是有一小点点的low的,所以准备好好学习一下,写博客记录一下,权当笔记和动力了.*...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Rtti单元(1)获取类的方法、属性、字段的列表
举报原因:
原因补充:

(最多只允许输入30个字)