Mic*_*ick 42 delphi reflection rtti delphi-2010
我听说过很多关于Delphi 2010新的/改进的RTTI功能,但我必须承认我的无知......我不明白.我知道每个版本的Delphi都支持RTTI ......我知道RTTI(运行时类型信息)允许我在应用程序运行时访问类型信息.
但究竟是什么意思呢?Delphi 2010的RTTI支持与.NET中的反射相同吗?
有人可以解释为什么RTTI有用吗?假装我是你的尖头发老板,帮助我理解为什么RTTI很酷.我如何在实际应用程序中使用它?
Aar*_*ght 37
RTTI在Delphi中仍然不很全功能作为.NET或其他托管语言中的体现,因为它是在编译的代码运行,而不是一种中间语言(字节码).然而,这是一个非常类似的概念和新的RTTI系统德尔福2010年带来了它很多接近反射,露出一个完整的面向对象的API.
在2010年前期,RTTI相当有限.关于我唯一记得做的事情是将枚举类型转换为字符串(反之亦然),以便在下拉列表中使用.我可能曾经一度使用它来控制持久性.
使用D2010中的新RTTI,您可以做更多的事情:
基于属性的元数据(TCustomAttribute).典型的用例是自动验证属性和自动权限检查,这是您通常需要编写大量代码的两件事.
添加Active Scripting支持(即使用Windows脚本控件)
建立插件系统; 你以前可以做到这一点,但有很多令人头疼的问题.我无法找到一个从上到下这样做的好例子,但现在所有必要的功能都可以使用.
看起来有人甚至试图为Delphi 2010 实现Spring(DI框架).
所以它绝对非常有用,虽然我不确定你能用PHB解释它有多好; 它的大部分用处可能都是通过第三方库和框架来实现的,就像它今天在.NET社区中工作一样 - 很少看到反射代码存在于业务逻辑中,但是一个典型的应用程序会使用它几个基于反射的组件,如对象关系映射器或IoC容器.
我回答了这个问题吗?
Lac*_*anG 12
大多数人可能不会在现实世界的应用程序中使用它.
将使用它的人是框架构建者.像DUnit这样的框架广泛使用RTTI.
使用新的RTTI功能,我们应该开始看到更多高级框架和工具的出现,类似于.NET可用的框架和工具.这些框架将比RTTI自身更快地改变您的开发.
Mas*_*ler 11
D2010的扩展RTTI很像C#的反映.它使您能够获取对象的任何字段,或检查其方法.这有各种各样的潜在用途.例如,如果您可以读取对象的任何字段,则可以编写可以与任何对象一起使用的序列化代码.检查方法并获取其名称和签名的能力使得使用脚本引擎注册更容易.
对我来说,这是扩展RTTI的主要优势:通过检查其成员编写适用于任何类的代码的能力,而不是为每个单独的类定制编写相同代码的不同版本.
| 归档时间: |
|
| 查看次数: |
8254 次 |
| 最近记录: |