Delphi2010强化的反射(续)


上一篇文章讲了Delphi2010下对于类的反射,文章一发出来,马上就有人说,Record不行。我自己试了下,还真不行,因为那个GetType()方法不能把Record直接传入,试了一下用FindType()传入名称去找,也失败了,直接返回nil。于是在上一篇文章出现后几分钟,又有了这篇文章。

首先我们需要一个函数,来获取Record的信息。参考官方的Demo程序,Record可以被获取到,但是却并非常规方法。于是只能写一个函数了,我想那个FindType()应该是bug吧,如果GetTypes()能获取到,那它不应该获取不到。



这里用了个最笨的办法去获取Record有关的信息,向函数传入Record的名称,然后遍历整个Pool,比较名称并取出相同的那个。

有了这个还不够,我声明了一个简单的Record,但是编译后运行,却发现没能找到。稍一想也明白了,原来是我没有用到过它,那么编译的时候就自动把它无视了。用一个简单的编译预处理指令搞定它。



好了再次运行程序,刚才写的那个函数能找到这个Record了。但是FindType()还是不行,算了,不用那个,就用我们自己写的吧。

稍微修改一下上一篇文章里的程序:




然后再往界面上放一个按钮,用来测试对Record的成员变量读写


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值