Delphi新RTTI的实际用法 - 属性,值

Iva*_*nov 19 delphi attributes rtti delphi-2010

在Delphi中找到了关于新RTTI的一个很好的解释,但我不明白我读过的所有重要内容 - 我在哪里可以使用它?

它应该取代什么?

Run*_*ner 20

扩展的RTTI就像在.NET中的Reflection一样.它使您可以访问内部应用程序结构信息.您可以在运行时访问类属性,方法等.在以前无法执行的范围内.

一些使用方法:

  1. 将类序列化/反序列化为XML或其他媒体
  2. 将对象映射到数据库.ORM.
  3. 克隆对象
  4. 动态调用方法
  5. 在运行时"扫描"对象并根据该行为进行操作.
  6. 更容易开发"插件"类型系统

可能有很多情况下使用它会有所帮助.简而言之,它为您的应用添加了动态方面.与在设计时设计所有内容相比,您的产品能够在运行时更有效地完成某些任务.它不是一颗银弹,许多人可能永远不会使用它.但是,如果不使用新的RTTI,一些设计模式或某些问题就无法解决(至少不能有效解决)

  • 让我加上这个......它将主要由框架设计者或组件编写者使用.例如,您可以查看DeHL,它使用此功能为程序员提供XML序列化. (3认同)

mjn*_*mjn 5

扩展RTTI可能有用的一个例子:

直到今天,必须发布表单属性,因为这种可见性是序列化/反序列化Delphi表单文件(dfm)所必需的.

通过扩展RTTI,Delphi可以使用不需要高可见性的新流层.当然,这只是一个想法,但实际上有一个优点,即表单上的所有组件都可以是私有的受保护的.这将是更多的OOP(封装)并消除由外部可见的表单字段/属性列表中的数十个不相关条目引起的"噪声".


扩展RTTI的另一个典型用例是控制反转依赖注入框架.

例如,Delphi Spring Framework Delphi需要Delphi 2010(或更高版本),因为它大量使用RTTI,可用于构造函数注入.