【发布时间】:2015-05-13 14:01:41
【问题描述】:
我希望(如果可能的话)枚举一个界面中的所有字符串属性,如下所示:
IXMLDocumentSummaryType = interface(IXMLNode)
['{AD394EAD-1253-4CA5-9F0A-76122CB53D88}']
{ Property Accessors }
function Get_Uid: UnicodeString;
function Get_RsUid: UnicodeString;
//etc
{ Methods & Properties }
property Uid : UnicodeString read Get_Uid write Set_Uid;
property RsUid : UnicodeString read Get_RsUid write Set_RsUid;
property Meta : UnicodeString read Get_Meta write Set_Meta;
property Error : UnicodeString read Get_Error write Set_Error;
end;
有很多文本属性,我只对 43 个感兴趣。所以,我将这 43 个的名称放在一个静态数组中。
Fields: array[0..42] of RSummary= (
(Name: 'RsUid' ; Value: ''),
(Name: 'GbUid' ; Value: ''),
etc...
);
现在我想枚举属性并自动将这些属性的值放入数组中。 我有 Delphi XE7。
我试过这个:
var
C: TRttiContext;
T: TRttiType;
F: TRttiField;
P: TRttiProperty;
begin
T:= C.GetType(IXMLDocumentSummaryType) <----- not working
【问题讨论】:
-
什么Delphi版本?最新版本的 RTTI 功能与旧版本不同,因此版本很重要。
-
@Ken 假设您已将接口中的相同属性放入对象中 - 属性可能存在也可能不存在于任一侧。
-
@Ken 只定义 Jerry 正在使用的接口的属性是很常见的。此外,没有理由期望给定一个接口,您可以获得一个实现对象。无论如何,这样做是一种相当可疑的做法。
-
@Ken 关于 RTTI 获取实现对象我只字未提。鉴于问题的前提是我们从接口开始,让我们这样做。换句话说,假设手头没有实现对象是合理的。
-
@Ken 我不明白你的意思。
标签: delphi interface delphi-xe7