我想使用 RTTI 访问以下属性
MyComponent1.Property['variable'].SubProperty
我想要这样的东西:
var
Ctx: TRttiContext;
Typ: TRttiType;
SubTyp: TRttiType;
Prop: TRttiProperty;
SubProp: TRttiProperty;
begin
Ctx:= TRttiContext.Create;
Typ:= Ctx.GetType(MyComponent1.ClassInfo);
Prop:= Typ.GetProperty('Property['variable'].Subproperty') //not possible
Prop.SetValue(MyComponent1.Property['variable'],'500');
end;
基本上我想访问我的组件的子属性,并且我只有字符串,所以我不能使用Typ:=Ctx.GetType(MyComponent1.ClassInfo)
进而Prop:=Typ.GetProperty('Property['variable'].Subproperty')
这是不允许的。请注意,第一个属性有一个参数。我想我必须获得第一个属性,然后以某种方式获得第二个属性,因为我无法使用这个 property1"."property2
有谁知道这是怎么做到的吗?
像所有其他属性一样索引属性(除了对对象字段的直接引用)只是一个快捷方式getXXX
and setXXX
方法。
尝试这样:
获取所有索引属性Ctx.GetType(MyComponent1.ClassInfo)
with GetDeclaredIndexedProperties or GetIndexedProperties
搜索所需Property
在返回的数组中TRttiIndexedProperty实例。
从中获取 write 方法描述对象WriteMethod的财产TRttiIndexedProperty
找到对象。
如果需要,获取方法参数描述GetParameters call.
Call Invoke方法描述对象的方法(带有构造函数参数)列表来设置属性值。
Update
这仅适用于 XE2 及更高版本的 Delphi 版本。
在以前的版本中,只能使用 RTTI 中讨论的内容来采用索引属性这个问题.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)