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

时间:2010-04-17 06:29:58

标签: delphi attributes delphi-2010 rtti

我找到了great explanation about the new RTTI in Delphi,但我不明白我读过的所有重要内容 - 我在哪里可以使用它?

它应该替换什么?

2 个答案:

答案 0 :(得分:20)

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

使用它的一些方法:

  1. 将类序列化/反序列化为XML或其他媒体
  2. 将对象映射到数据库。 ORM。
  3. 克隆物品
  4. 方法的动态调用
  5. 在运行时“扫描”对象并根据该行为进行操作。
  6. 更容易开发“插件”类型系统
  7. 可能有很多情况下使用它会有所帮助。简而言之,它为您的应用添加了动态方面。与在设计时设计所有内容相比,您的产品能够在运行时更高效地完成某些任务。它不是一颗银弹,许多人可能永远不会使用它。但是,如果不使用新的RTTI,一些设计模式或某些问题就无法解决(至少不能有效解决)

答案 1 :(得分:5)

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

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

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


扩展RTTI的另一个典型用例是Inversion of ControlDependency Injection框架。

例如Delphi Spring Framework Delphi需要Delphi 2010(或更高版本),因为它大量使用RTTI,可用于constructor injection