在Delphi中对对象进行RTTI
时间:2020-03-06 15:05:32 来源:igfitidea点击:
我试图在Delphi中将对象解析为XML,所以我读了有关调用对象的ClassInfo方法以获取其RTTI信息的信息。
问题是,这显然仅适用于TPersistent对象。否则,我必须在源代码中专门添加一个编译器指令{$ M +},以使编译器生成RTTI信息。
因此,我很高兴地添加了该指令,只是发现了,即使它确实从ClassInfo调用返回了某些内容(它曾经返回nil),现在我也无法从中检索该类的属性,字段或者方法。就像它创建了空对象一样。
知道我在这里想念什么吗?谢谢!
解决方案
RTTI只会向我们显示已发布的属性,等等。不只是公开的。
尝试使用TObject编写代码,看看如果该代码无效,会发生什么情况,请发布代码,因为并非每个人都有心。
我们是否将这些属性和方法放入"已发布"部分?
除此之外,"经典" RTTI($ TYPEINFO ON)只会为我们提供有关属性的信息,而不是方法的信息。对于这些,我们需要"扩展的" RTTI($ METHODINFO ON)。
扩展RTTI的良好起点:David Glassborow讨论了扩展RTTI
(谁会相信,就在这一刻,我完成了一些使用扩展RTTI的代码的编写,并决定稍微浏览一下Stack Overflow :)
我们是否考虑过使用TXMLDocument组件?它会查看XML,然后创建一个代表XML文件的Delphi类的漂亮单元-使它非常非常容易地读写XML文件。