【问题标题】:Trouble playing with indexed propertes via new RTTI [D2010]通过新的 RTTI [D2010] 使用索引属性时遇到问题
【发布时间】:2009-11-06 04:22:43
【问题描述】:
  ShowMessage(TRttiContext.Create.GetType(TStringList)
    .GetProperty('Strings').ToString);

上述代码失败,因为 .GetProperty 对“字符串”、“对象”、“值”(带有索引器的属性)等属性返回 nil。我认为这是一个已知的限制,问题是是否有任何方法可以访问这些索引属性(最好不要回退到旧的 RTTI 实用程序)。

【问题讨论】:

  • 您有内存泄漏,因为您创建了一个 TStringList 实例但从未释放它。 ClassInfo 是一个类函数;您可以直接在类上调用它,而无需先创建实例。更好的是,因为您已经确切知道您想要哪种类型的 RTTI,所以调用另一个采用类引用的重载:GetType(TStringList)
  • 谢谢,在帖子中编辑了代码。

标签: delphi delphi-2010 rtti


【解决方案1】:

索引属性没有 RTTI,但基础字段有。所以可以直接通过RTTI访问TStringList.FList。不过要小心,因为这涉及到原始指针,并确保不要超出 Count 属性。你可以对其他类做类似的事情。

【讨论】:

    【解决方案2】:

    RTTI 存在差距。索引属性是其中之一。

    但是当您没有获得属性名称时,为什么要尝试访问它们? ;-) 当您知道有这样的属性时,您可以尝试使用强制转换。

    你没有得到 typ 方法参数的 RTTI

    procedure MyProc(const AParam: array of AType)

    还有。

    如果我们无法获得 RTTI,有人知道更多元素吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 2014-12-07
      • 1970-01-01
      相关资源
      最近更新 更多