3
  ShowMessage(TRttiContext.Create.GetType(TStringList)
    .GetProperty('Strings').ToString);

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

4

2 回答 2

2

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

于 2009-11-06T04:30:32.530 回答
1

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

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

对于 typ 的方法参数,您没有获得 RTTI

procedure MyProc(const AParam: array of AType)

还。

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

于 2009-11-06T08:53:57.133 回答