1

我想使用 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
有人知道该怎么做吗?

4

1 回答 1

0

索引属性作为所有其他属性(对对象字段的直接引用除外)只是方法的快捷getXXX方式setXXX

试试这样:

  1. 获取Ctx.GetType(MyComponent1.ClassInfo)with GetDeclaredIndexedPropertiesor的所有索引属性GetIndexedProperties

  2. 在返回的实例Property数组中搜索所需的。TRttiIndexedProperty

  3. WriteMethod从找到的对象的属性中获取写入方法描述对象TRttiIndexedProperty

  4. 如果您需要通过GetParameters调用获取方法参数描述。

  5. 使用构造的参数列表调用Invoke方法描述对象的方法以设置属性值。

更新

这仅适用于 XE2 及更高版本的 Delphi 版本。

在以前的版本中,只能使用此问题中讨论的内容为 RTTI 采用索引属性。

于 2013-06-05T20:36:03.627 回答