强大的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^

http://blog.csdn.net/diligentcatrich/article/details/5500748

时间: 2024-11-03 22:12:38

强大的DELPHI RTTI–兼谈需要了解多种开发语言的相关文章

如何匿名上网?-兼谈安全上网

身在中国大陆,可能大家比较关心的是科学上网:今天我谈的不是科学上网,而是匿名上网与安全上网. 什么叫匿名上网?在互联网上,匿名是互联网独特的一种特性.1993年<纽约客>杂志上彼得·斯坦纳的一幅漫画被网民们所信奉.这幅漫画的标题是“在网上,没有人知道你是一条狗”. 虽然在网络上匿名给予了人们更大的自由(阅读与发布信息的自由),但是其代价则是丧失了信息来源的确定性,而且也会引发许多不良的和违法的行为.例如网络色情.诽谤性的言论,欺诈行为,侵犯版权等等. 匿名上网的重要性大家访问网站,然后绝大多数

对创业者总担心大公司抄袭的八点建议——兼谈腾讯微博

腾讯微博最近发布了调整新闻,不再赘述.正好把老生常谈的"大公司抄袭"话题再说一遍. 腾讯微博和新浪微博不是第一批twitter模式,第一批的twitter模式早就关站了,和腾讯微博.新浪微博没什么关系.而且第一批难道就不是"抄"么.所以结论一:创业者不必张口闭口担心大公司抄袭,本来你们也不是原创. 腾讯微博和新浪微博是同一批中最好的两家了,当然现在就只剩新浪微博一支独秀了.所以结论二:创业者不必张口闭口担心大公司抄袭,不是每家大公司都能抄袭成功的. 接下来抛开具体案

幼谈苹果新开发语言:Swift和苹果的用心

今天是个值得纪念的日子:由于苹果的WWDC大会.苹果的每次WWDC(全球开发人员大会)举行都让我们像打了肾上腺素这么兴奋.幸福.惊叹.震撼.深思. 今年也不例外,最关键的是苹果带来了它的一门新开发语言:Swift. 霎时间风起云涌,短短几个小时互联网界掀起了一股谈论Swift的小高潮,假设你不知道Swift,你会觉得这是一件非常丢脸的事情,粑粑. 为了不至于太落后受歧视,我今天也来简单谈谈Swift(不知道为何,国内把它称为雨燕.别这样好吗?这让我想起了 长安铃木的Swift 雨燕汽车) 一.全

浅谈随机数发生器(C语言)

本文出自:点击打开链接 本来在做数据结构课程设计..想用随机数生成测试数据,然后看到随机数就不由自主的想到精度问题,想到精度问题又想到随机数生成的时间问题,想到时间问题又想到调用系统随机数生成问题..呵呵呵呵呵. C语言调用Linux系统随机数:linux C程序中获取shell脚本输出 C语言往里写就好说了(Linux) const char *run ="echo '"+str+"' > test"; system(run); 另外在Google比较难以访

Delphi与各种装置设备之间的开发整合及应用实例

 优酷视频专辑: 使用 Delphi整合行动装置应用的十大最佳影片,介绍 Delphi与各种装置设备之间的开发整合及应用实例,欢迎大家观赏影片. http://www.youku.com/playlist_show/id_25897228.html ? 版权声明:本文为博主原创文章,未经博主允许不得转载.

【绝对干货】Swift是花拳绣腿吗?从Swift谈开发语言与程序员的职业发展

Swift是一种新的编程语言,用于编写 iOS 和 OS X 应用.Swift 结合了 C 和 Objective-C 的优点并且不受C兼容性的限制.Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣.我们的腾讯Bugly移动开发者沙龙第二期就是围绕这一主题展开的,很多同学表示听的不够过瘾,因此小编特意邀请分享者将精华整理成文字,来于大家分享. 首先我们考察一下Swift究竟是一个什么样的变成语言.在2014年苹果的WWDC(世界开发者大会)上,Swift首次亮

DELPHI RTTI

运行期类型信息(RTTI)是一种语言特征,能使应用程序在运行时得到关于对象的信息. 运行期类型信息(RTTI)是一种语言特征,能使应用程序在运行时得到关于对象的信息.RTTI是Delphi的组件能够融合到IDE中的关键.它在IDE中不仅仅是一个纯学术的过程.    由于对象都是从TObject继承下来的,因此,对象都包含一个指向它们的RTTI的指针以及几个内建的方法.下面的表列出了TObject的一些方法,用这些方法能获得某个对象实例的信息. 函数   返回类型 返回值 ClassName( )

delphi RTTI 反射技术

[delphi] view plain copy unit Unit_main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, TypInfo; type TForm_main = class(TForm) Button1: TButton; Memo1: TMemo; Memo2: TMemo; Button2: TButt

城市化与中国经济增长——兼谈李克强经济思想

现任中共中央常委,国务院总理李克强是经济学家厉以宁先生的高足,拥有北京大学经济学博士学位.研究生期间,我的研究课题是关注中国城市化方面的金融策略研究,期间也不可避免的涉略了大量这部分的著述.期间,李克强总理的经济理论令我尤为印象深刻.尽管我们都知道李总理是经济学博士,但是一来很多人对他的学术思想不甚了解.另一方面,在很多人看来领导干部去混个文凭在中国时下的并不十分纯净的学术环境里难免有沽名钓誉之嫌.而且大部分官员的学历学位都是"盛名之下,其实难副".然而,进过仔细的研究,不禁令人感叹李