为什么我应该关心德尔福的RTTI?

我听说过很多新的/改进的 RTTI capabilities of Delphi 2010,但我必须承认我的无知…我不明白。我知道每个版本的Delphi都支持RTTI …我知道RTTI(运行时类型信息)允许我访问类型信息,而我的应用程序运行。

但究竟是什么意思?德尔福2010的RTTI是否支持reflection in .NET相同的事情?

有人可以解释为什么RTTI是有用的?假装我是你尖尖的头发老板,并帮助我明白为什么RTTI是酷。我如何在现实世界的应用程序中使用它?

解决方法

在Delphi中的RTTI仍然不像Reflection或者其他托管语言一样全功能,因为它在编译代码上操作,而不是中间语言(字节码)。然而,它是一个非常相似的概念,Delphi 2010中的新RTTI系统使它更接近反射,暴露了一个完整的面向对象的API。

在D2010之前,RTTI相当有限。关于我记得做的唯一的事情是转换一个enumerated type to a string(或vice versa)用于下拉列表。我可能已经使用它在一点为control persistence

有了D2010中的新RTTI,你可以做更多的事情:

> XML Serialization
>基于Attribute的元数据(TCustomAttribute)。典型的使用情况是自动验证属性自动权限检查,通常需要写两个东西来写很多代码
>添加Active Scripting支持(即使用Windows脚本控件)
>构建插件系统;你可以这样做,但有很多的头痛。我不能找到一个很好的例子,有人从顶部到底部这样做,但所有必要的功能现在可用。
>看起来有人甚至试图为Delphi 2010实现Spring(DI框架)。

所以这绝对是非常有用的,虽然我不知道你能多好地解释它到PHB;它的大部分有用性可能会通过第三方库和框架实现,就像它在.NET社区中的工作方式一样 – 很少看到反射代码位于业务逻辑中,但典型的应用程序将使用的几个基于反射的组件,如对象关系映射器或IoC容器。

我回答了这个问题吗?

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...