Delphi2010强化的反射

简介: 很多人可能都发现了,Delphi2010编译后的程序体积非常大,一个空的窗体居然达到接近800K。这些多出来的体积其实就是运行时信息,使用这些信息,我们可以轻松的获取到有关的类内容,并在不知情的情况下使用它们。

很多人可能都发现了,Delphi2010编译后的程序体积非常大,一个空的窗体居然达到接近800K。这些多出来的体积其实就是运行时信息,使用这些信息,我们可以轻松的获取到有关的类内容,并在不知情的情况下使用它们。这个特性对于实现多层的架构有着非同一般的意义。
Delphi2010提供了一个Rtti单元,用于实现运行时信息的Get, Set。
在其中能找到一个名为TRttiContext的Record,它就是本文的主角了。TRttiContext提供了一个静态的构造方法,也就是说,我们无需手工的创建它。新建一个窗体,然后在public下写入 Ref: TRttiContext; 即可完成声明,以后就能直接使用了。(此处的Ref可以按需求修改成任何的合法变量名)
在此我写了一个类,用来做测试,如下(Delphi2010已不再要求用{$MethodInfo}来标识用于反射的信息)

接着就是用代码来获取类的信息了,我在窗体上放了一个TMemo并命名为mm,用于输出信息。
如下:

这是一个很通用的方法,对于任意的类都能调用这个方法来显示它的有关信息。
在窗体的Create事件中,再写一点调用的代码:

到此为止我们先运行一下程序,看看效果,如图所示,TTestClass的信息已经全部输出了。
有人可能会问,为什么只写了两个方法,反射却得到那么多方法呢?那是因为反射机制会同时得到父类的内容。

注意到什么了吗?那三个Field,代码中是private下的,居然拿到了!而同在private下的GetXY()方法却没有得到。暂时还无法确定是否反射单元的bug,或是原本就如此设计。总之现在,我们该拿到的东西都拿到了,不该拿到的也有一部分拿到了。
好了,上面的部分只是“显示”出一个类的信息,对于反射机制来说,只是显示是完全不够的,还要能够调用。很幸运的是,Delphi2010不仅在获取上做了改进,而且调用也方便了很多。
以下的代码是调用TTestClass内的DoAdd()方法:

再来一个给成员变量赋值的代码:

是不是觉得反射用起来很方便呢?不仅仅是类,Record, Set, 有序类型和一些其他的东西在Delphi2010下也都拥有运行时信息,可以被动态获取到。官方提供了一个名为rtti_browser的演示程序,随Delphi2010分发给了最终用户,有兴趣也可以参考一下。

相关文章
|
程序员 C++ 开发者
《Lua游戏开发实践指南》一2.2Lua简介
本节书摘来华章计算机《Lua游戏开发实践指南》一书中的第2章 ,第2.2节,(美)Paul SchuytemaMark Manyen著 田剑译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3066 0
|
JavaScript 前端开发 设计模式
BackboneJS框架的技巧及模式(1)
原文见:http://coding.smashingmagazine.com/2013/08/09/backbone-js-tips-patterns/ 译者注:本文采用意译,省略所有口水话,内容直指要义。
791 0
|
5天前
|
云安全 人工智能 安全
AI被攻击怎么办?
阿里云提供 AI 全栈安全能力,其中对网络攻击的主动识别、智能阻断与快速响应构成其核心防线,依托原生安全防护为客户筑牢免疫屏障。
|
15天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
9天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
607 214
|
存储 人工智能 监控
从代码生成到自主决策:打造一个Coding驱动的“自我编程”Agent
本文介绍了一种基于LLM的“自我编程”Agent系统,通过代码驱动实现复杂逻辑。该Agent以Python为执行引擎,结合Py4j实现Java与Python交互,支持多工具调用、记忆分层与上下文工程,具备感知、认知、表达、自我评估等能力模块,目标是打造可进化的“1.5线”智能助手。
850 61
|
7天前
|
人工智能 移动开发 自然语言处理
2025最新HTML静态网页制作工具推荐:10款免费在线生成器小白也能5分钟上手
晓猛团队精选2025年10款真正免费、无需编程的在线HTML建站工具,涵盖AI生成、拖拽编辑、设计稿转代码等多种类型,均支持浏览器直接使用、快速出图与文件导出,特别适合零基础用户快速搭建个人网站、落地页或企业官网。
1261 157
|
4天前
|
编解码 Linux 数据安全/隐私保护
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
教程分享免费视频压缩软件,免费视频压缩,视频压缩免费,附压缩方法及学习教程
241 138