【问题标题】:Practical usage for Delphi's new RTTI - Attributes,ValuesDelphi 新 RTTI 的实际使用 - Attributes,Values
【发布时间】:2010-04-17 06:29:58
【问题描述】:

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

它应该替换什么?

【问题讨论】:

  • 我会 +1 你的问题,如果你提供一个链接到你谈论的伟大的解释......
  • 这里:robstechcorner.blogspot.com/2009/09/…“实际使用”指南还没有写出来。这就是我问的原因。

标签: delphi attributes delphi-2010 rtti


【解决方案1】:

扩展 RTTI 的工作方式类似于 .NET 中的反射。它使您可以访问内部应用程序结构信息。您可以在运行时访问类属性、方法等,在某种程度上是您以前无法做到的。

一些使用方法:

  1. 将类序列化/反序列化为 XML 或其他媒体
  2. 对象到数据库的映射。 ORM。
  3. 对象的克隆
  4. 方法的动态调用
  5. 在运行时“扫描”对象并据此采取行动。
  6. “插件”类型系统的开发更轻松

可能在很多情况下使用它会有所帮助。简而言之,它为您的应用程序添加了动态方面。你的产品能够在运行时做一些事情,而且比在设计时设计一切更有效。它不是灵丹妙药,很多人可能永远不会使用它。但是如果不使用新的 RTTI,某些设计模式或某些问题就无法解决(至少不是以有效的方式)

【讨论】:

  • 让我也添加一下...它将主要由框架设计人员或组件编写者使用。例如,您可以查看 DeHL,它使用此功能为程序员提供 XML 序列化。
【解决方案2】:

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

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

借助扩展的 RTTI,Delphi 可以使用一个新的流层,它不需要如此高的可见性。当然这只是一个想法,但在实践中具有优势,即表单上的所有组件都可以是privateprotected。这将是更多的 OOP(封装),并消除了由外部可见的表单字段/属性列表中的数十个不相关条目引起的“噪音”。


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

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

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 2011-04-27
    • 1970-01-01
    • 2010-09-15
    • 2011-07-22
    • 2011-03-05
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多