技术贴]强大的DELPHI RTTI–兼谈需要了解多种开发语言

一月 27th, 2005 by 猛禽

风焱在《“18般武艺”?》中说到他碰上的被多种语言纠缠的问题。我在回复里说:
 很多语言只要能看懂几分就行了,没必要每一种都精通
但是如果只会很少的一两种语言也是不行的。

因为看了一些关于JAVA的反射技术的应用,忽然想到DELPHI的RTTI也很强,于是试着拿数据集下手,用RTTI来实现它的对象化。用了两个
晚上时间就搞定了(要不是因为开始时搞错对象–基类用了TObject,其实应该是用TPersistent才对),果然很简单。

假设有一个ADODataSet控件,连接罗斯文数据库,SQL为:

select * from Employee

现在要把它的内容中EmployeeID, FirstName, LastName三个字段显示到ListView里。我通过RTTI实现了一个数据集代理类,使得代码得到大大的简化(这两天争取把结果整理出来另外撰文说明)。其结果大致如下:

Type
TPDSEmployee = class( TMProxyDataSet )
published
Property EmployeeID : Integer Index 0 Read GetInteger Write SetInteger;
Property FirstName : String Index 1 Read GetString Write SetString;
Property LastName : String Index 2 Read GetString Write SetString;
End;
...
emp := TPDSEmployee.Create( ADODataSet1 );
While emp.ForEach Do
With ListView1.Add Do
Begin
Caption := IntToStr( emp.EmployeeID );
SubItems.Add( emp.FirstName );
SubItems.Add( emp.LastName );
End;
emp.Free;

对比传统的实现代码,好处是显而易见的。

但是当我实现出这个TMProxyDataSet类后,不禁感到痛心疾首,这个我早在三年前就应该想到的。

三年前DELPHI6刚推出时,我就发现它的SOAP功能是通过DELPHI强大的RTTI来实现的,我为什么当时没有想到去深入研究一下DELPHI的RTTI呢?

这次要不是因为看到了一些JAVA的资料,我可能还是想不到,所以多了解一些别的语言是很重要的事。特别是最近以来,动态语言越来受到关注,虽然它们在性能上不能跟原生开发相比,但在很多的开发思想上,具有重要的启发意义。

在做了这个东东以后,我才意识到,DELPHI其实是所有原生开发语言中,动态性最高的,并不比基于虚拟机的JAVA和C#低多少。只是长期在做RAD的开发,没有体会到而已。程序员在RAD下被惯坏了。

做完这个,我打算下一步再试试用RTTI实现对象的XML持久化(基本上就是抄袭一下DELPHI本身的SOAP实现代码-_-|||)。这个思路应该会比我原先用的XML Data Binding要方便很多,至少不用再去写那个麻烦的XML Schema了。

BTW:以前没有太关注RTTI,效率恐怕是其中最重要的一个原因,但是现在看来,跟虚拟机语言甚至动态语言相比,DELPHI作为原生应用开发,这点RTTI效率损失其实根本没有想像中那么大的影响。换来开发效率的大大提高还是很值得的。

BTW:抄了令狐的一段CSS(<pre>)。^O^

技术贴]强大的DELPHI RTTI–兼谈需要了解多种开发语言相关推荐

  1. 漫谈 Google 的 Native Client(NaCl) 技术(二)---- 技术篇(兼谈 LLVM)

    转自:http://hzx5.blog.163.com/blog/static/40744388201172531637729/ 漫谈 Google 的 Native Client(NaCl) 技术( ...

  2. 漫谈Google的Native Client(NaCl)技术(二)–技术篇(兼谈LLVM)

    Native Client简介 Native Client是Google在浏览器领域推出的一个开源技术,它允许在浏览器内编译Web应用程序,并执行原生的编译好的代码.Native Client有以下几 ...

  3. 区块链技术要用到什么开发语言?

    回顾2009年到如今,区块链技术的火热程度是逐年增加.各大行业巨头也在疯狂布局,势必要上演一场"群雄逐鹿"的商业大战.那这场好戏什么时候上演?有人说就在最近这两三年,还有人甚至说就 ...

  4. zw版·Halcon与delphi(兼谈opencv)

    zw版·Halcon与delphi(兼谈opencv) QQ群 247994767(delphi与halcon) <Halcon与delphi>系列,早两年就想写,不过一方面,因为Halc ...

  5. 互联网大脑的云反射弧路径选择问题,兼谈ET大脑模糊认知反演理论

    互联网大脑的云反射弧路径选择问题研究 2008年以来,我们在互联网大脑架构和互联网进化的研究中提到,"互联网大脑架构,就是互联网向与人类大脑高度相似的方向进化过程中,形成的类脑巨系统架构.互 ...

  6. 企消互动广告:网络时代广告活动的创新形式——兼谈杜丽反败为胜对企业的启示...

                                               企消互动广告:网络时代广告活动的创新形式                                      ...

  7. 垃圾回收机制GC知识再总结兼谈如何用好GC(转)

    作者:Jeff Wong  出处:http://jeffwongishandsome.cnblogs.com/  本文版权归作者和博客园共有,欢迎围观转载.转载时请您务必在文章明显位置给出原文链接,谢 ...

  8. 工作十年之感悟 -- 兼谈生活与人生

    工作十年之感悟 – 兼谈生活与人生 开篇 2020 本身是不平凡的一年,身处疫情中心 – 武汉,更是让这一年在人生中变得异常夺目.走过八月,将手上的事情一一落地,有了更多时间来思考,总结,并回忆过往: ...

  9. 转:谨防企业信息化的洋务运动--兼谈互联网时代的管理变革

    转:谨防企业信息化的洋务运动--兼谈互联网时代的管理变革 几乎所有的企业都很重视"管理",企业家们购买许多管理学书籍.参加各类管理培训.EMBA,请咨询公司为企业制定战略.梳理流程 ...

最新文章

  1. 机器学习入门(12)— 激活函数层 ReLU、Sigmoid 层的实现
  2. TinyML:下一轮人工智能革命
  3. 东八区转为0时区_初中会考重要知识点:地理时区计算技巧全掌握
  4. matlab怎么删除上一条命令_怎么恢复电脑上删除的图片?四大步搞定
  5. 成都东万计算机学校,东兴区东方科技职业技术学校
  6. Nacos(一)之简介
  7. Redis安装及配置(Linux)
  8. Eclipse的设置、调优、使用(解决启动卡顿等问题)
  9. 烂泥:apache虚拟主机的学习与应用
  10. 2021年高压电工考试题及高压电工考试试卷
  11. 微信公众号迁移公证办理流程
  12. qlv视频怎么转换成mp4格式工厂?如何用格式工厂将qlv格式转换成mp4格式?
  13. Git分支管理及命名规范
  14. js 删除数组元素。
  15. 攻防世界各类题目相关
  16. STM32实战(1):搭建模板工程
  17. 4G双卡工业CPE及MIFI
  18. 【Java开发者专场】阿里专家梁笑:2018双十一下单成功率99.9%!供应链服务平台如何迎接大促... 1
  19. 华南农业大学课设——数据结构课设、Java课设、操作系统课设
  20. 【浏览器】Chrome/Edge外部导入扩展(.crx)无法启用的解决方法

热门文章

  1. 【蓝桥杯】 交换瓶子
  2. hdu 1506(dp || 单调栈)
  3. Linux vi编辑器的使用
  4. 暴力求解法 之 枚举排列
  5. Disgruntled Judge UVA - 12169
  6. 代码审计之CVE-2018-7600-Drupal远程代码执行漏洞-Render API
  7. 【JulyEdu-Python基础】第 8 课:Python第三方库
  8. 移动端-ibokan
  9. 启用不安全的HTTP方法解决方案
  10. 一个多功能蓝色漂亮的搜索条