Delphi 是否可以获取类属性的索引?
是否可以获取类属性的索引?比如说Delphi 是否可以获取类属性的索引?,delphi,properties,Delphi,Properties,是否可以获取类属性的索引?比如说 type TMyClass = class ... public ... property P1: Integer Index 1 read GetInteger write SetInteger; property P2: Integer Index 2 read GetInteger write SetInteger; property P3: Integer Index 3 read GetInteger wri
type
TMyClass = class
...
public
...
property P1: Integer Index 1 read GetInteger write SetInteger;
property P2: Integer Index 2 read GetInteger write SetInteger;
property P3: Integer Index 3 read GetInteger write SetInteger;
...
end;
您可以使用RTTI获取属性的索引。根据您的Delphi版本,您可以使用
GetPropInfo
方法(仅适用于已发布的属性)或通过TrtInstanceProperty
类访问此类信息
试试这个样品
I := IndexOfProperty(TMyClass.P2);
属性的RTTI包含索引。您的属性被声明为
public
,因此无法通过TypInfo
单元提供的老式RTTI访问这些属性。但是,可通过RTTI
装置(仅限D2010及更高版本)提供的较新样式的RTTI进行访问:
如果您的属性被声明为已发布,那么您可以使用TypInfo
RTTI:
uses
Rtti;
var
Ctx: TRttiContext;
I: Integer;
begin
Ctx := TRttiContext.Create;
I := (Ctx.GetType(TMyClass).GetProperty('P2') as TRttiInstanceProperty).Index;
end;
@Jerrydoge-我需要公共属性的索引。使用
GetPropInfo()
不需要创建类的实例。可以传递类类型而不是对象指针。另外,trttInstanceProperty
有自己的Index
属性,您不需要使用PropInfo.Index
。您提到了“(仅用于发布的属性)”,但示例是公共属性…@jerrydoge,我知道,OP必须修改类并将属性声明为已发布,才能使用GetPropInfo
函数。@PRUZ-我还有一个问题。请看,但他可以使用$RTTI pragma来公开TypeInfo也涵盖的财产,不是吗?@Remy Lebeau-我还有一个问题。请参阅@Arioch'The-Delphi XE4,{$RTTI显式方法([vcPublic,vcpublisted])属性([vcPublic,vcpublisted])}
但是GetPropInfo()
不适用于公共道具@布兰科,如果我知道。。。就我个人而言,我根本无法枚举类属性!
uses
Rtti;
var
Ctx: TRttiContext;
I: Integer;
begin
Ctx := TRttiContext.Create;
I := (Ctx.GetType(TMyClass).GetProperty('P2') as TRttiInstanceProperty).Index;
end;
uses
TypInfo;
var
I: Integer;
begin
I := GetPropInfo(TMyClass, 'P2').Index;
end;