文档章节

Delphi 2010 新增功能之: Rtti 单元(1)

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 341
阅读 66
收藏 1

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

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/10/15/1583969.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
减小Delphi XE 以上版 编译出来的程序体积

减小Delphi XE 以上版 编译出来的程序体积 . 默认Delphi XE, XE2, XE3,XE4,XE5, XE6 ... 编译出来的程序体积很大。 一般用两个方法可以很大程度上减少程序体积。 一、在工程中用编译指令禁用...

vga
2014/08/02
0
2
Delphi调用 C# 写的webservice

Delphi调用 C# webservice总结 用delphi的THTTPRIO控件调用了c#写的webservice。 下面是我调试时遇到的一些问题: 1:导入wsdl文件:file--new----other----webservice---WSDLimporter---输入...

vga
2014/11/25
0
0
Delphi 2010 中的泛型

Delphi 2010 中的泛型日期:2010年5月31日 作者: 人气:10504 查看:[大字体 中字体 小字体]2010已发布很长时间了,口碑还不错,准备用它开发下一项目,但对泛型等新东西的认识还不够,就搜了...

vga
2016/08/09
19
0
Visual Studio 2010 SP1即将发布,新功能概览

Visual Studio 2010中的Service Pack 1(SP1)的测试版提供的新功能和增强功能在以下几个方面: 诊断 的更新 基本的单元测试的支持。NET框架3.5 Visual C + + 更新 Visual Basic更新 Intern...

junwong
2012/03/09
0
0
Delphi 面向对象编程 第二章

类的声明是一种类型声明,在delphi中,类被当作一个类型来声明,语法为: type classname = class (baseclass) {field } {procedure and function } {property } end; 注意:1、类的声明可以...

CODER-SU
2011/12/20
0
1

没有更多内容

加载失败,请刷新页面

加载更多

颜色模型与颜色应用---RGB颜色模型

中国龙-扬科
22分钟前
3
0
网络优化-tcp和udp的协作

TODO

梦想游戏人
25分钟前
4
0
list和数组转化

Java中List转换为数组,数组转List List转换为Array可以这样处理: ArrayList<String> list=new ArrayList<String>(); String[] strings = new String[list.size()]; list.toArray(strings);......

west_coast
25分钟前
3
0
LSP 商户端API

Your domain:                  lsp-api-merchant.hhs2717.cnVirtualhost conf:             /usr/local/nginx/conf/vhost/lsp-api-merchant.hhs2717.cn.confDirectory of:......

BeanHo
35分钟前
2
0
设计模式 之 访问者模式

设计模式 之 访问者模式 概念 核心理念:将数据结构与算法分离。 使用场景:数据结构不变动,算法经常变动。 1、一个Visitor类存放被访问的对象,访问者主要处理具体算法与行为。 // 访问者...

GMarshal
39分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部