D2009反射?新功能还是骗局?

说这个问题前,请大家先参考李维先生的文章:《Tiburon遊記3 動手建立一個DataSnap JSON伺服器吧》
http://gordonliwei.spaces.live.com/blog/cns!CCE1F10BD8108687!2365.entry

文章中明确的说了, “對於需要輸出服務給用戶端的類別,資料模組或是遠端資料模組,必須使用新的編譯器指令{$MethodInfo ON}和{$MethodInfo OFF}包圍類別宣告。”

MethodInfo开关真的是新的编译器指令吗?前天我的论坛上出现一个关于D2009的元信息的讨论,也暴出了这个秘密,帖子见链接:http://mydelphi.5d6d.com/thread-888-1-1.html
肥猫兄已经证实了Delphi7也能使用MethodInfo指令,而且也有ObjAuto这个单元的存在!

我特地去看了一下,的确,Delphi7和Delphi2007下都有ObjAuto.pas,只不过有些内容与Delphi2009的不同。

把http://hi.baidu.com/rarnu/blog/item/faba6f63bb1dd7660c33fa97.html这篇文章的代 码拷到Delphi7中,编译运行,得到的结果与Delphi2009相同。也就是说,Delphi7也可以使用反射机制,编译器早就支持了。也就是说 Delphi2009的反射特性,实际上是早就存在的。也不像李维先生说的那样,是一个新的编译指令。

对于ObjAuto.pas的一些不同之处,可以用Delphi2009的同名文件来代替,然后略作修改,即可使老版本的Delphi也实现Delphi2009的反射机制。换言之,编译器上未对“反射”作修改,这是早已有的功能。代码如下:

procedure TForm1.FormCreate(Sender: TObject);
var
mi : TMethodInfoArray;
mih: PMethodInfoHeader;
begin
mi := Objauto2009.GetMethods(TTestCall);
for mih in mi do
begin
    ListBox1.Items.Add(mih^.Name);
end;
end;

在我的论坛上,我提供了修改的ObjAuto.pas,用于在Delphi7至Delphi2007各个版本下,实现Delphi2009的反射功能,此处下载:http://mydelphi.5d6d.com/thread-917-1-1.html

在此,我不禁要问,Borland/CodeGear到底在想什么?早就应该告诉用户有这些功能,为什么到了现在才说?还把它当成Delphi2009的新功能呢?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值