2009-11-06 38 views
3
ShowMessage(TRttiContext.Create.GetType(TStringList) 
    .GetProperty('Strings').ToString); 

以上代码播放失败。我认为这是一个已知的限制,问题是如果有任何方法可以访问这些索引属性(最好不要回退到旧的RTTI实用程序)。麻烦经由新RTTI [D2010]索引propertes

+1

由于您创建了一个TStringList实例,但没有释放它,所以您有内存泄漏。 ClassInfo是一个类的功能;您可以直接在课堂上调用它,而无需先创建实例。更好的是,既然你已经知道你想要哪种类型的RTTI,就调用另一个需要类引用的重载:'GetType(TStringList)'。 – 2009-11-06 08:47:11

+0

谢谢,编辑后的代码。 – 2009-11-07 03:58:40

回答

2

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

1

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

但是,当你没有得到属性名称,为什么你尝试访问它们? ;-)当你知道有这样一个属性时,你可以尝试一个转换。

您没有为典型

procedure MyProc(const AParam: array of AType)

还的方法参数得到RTTI。

任何人都知道更多的元素是我们不能得到RTTI?