Delphi 如何获取记录';什么是使用Rtti的详细信息?
我正在编写一个Rtti类,旨在用Rtti简化和概括操作:Delphi 如何获取记录';什么是使用Rtti的详细信息?,delphi,delphi-xe,rtti,Delphi,Delphi Xe,Rtti,我正在编写一个Rtti类,旨在用Rtti简化和概括操作: tRTTI_Assistant = class (tObject) private fSourceObject : tObject; ... property SourceObject : tObject read fSourceObject write fSourceObject; ... end; 如何声明将接收记录的属性?我不是舒尔,你到底想做什么。但我认为你正在寻找的是仿制药 type TMyRecord =
tRTTI_Assistant = class (tObject)
private
fSourceObject : tObject;
...
property SourceObject : tObject read fSourceObject write fSourceObject;
...
end;
如何声明将接收记录的属性?我不是舒尔,你到底想做什么。但我认为你正在寻找的是仿制药
type
TMyRecord = record
I:Integer;
S:string;
B:Boolean;
end;
TMyObject<T:record> = class
private
FMyRecord:T;
public
property MyRecord: T read FMyRecord write FMyRecord;
end;
类型
TMyRecord=记录
I:整数;
S:字符串;
B:布尔型;
终止
TMyObject=class
私有的
FMyRecord:T;
平民的
属性MyRecord:T读取FMyRecord写入FMyRecord;
终止
您不能添加记录类属性,该属性可以采用任何记录结构,并使用RTTI解析记录的内部细节
要想让它起作用,你必须用另一种方法。t值
可与RTTI一起用于解析任何类型
因此,请宣布:
tRTTI_Assistant = class (tObject)
private
//fSourceObject : tObject; // ! Use AnySource for objects as well
fAnySource : TValue;
...
//property SourceObject : tObject read fSourceObject write fSourceObject;
property AnySource: TValue read fAnySource write fAnySource;
...
end;
并称之为:
myAssistant.AnySource := TValue.From(myRecord);
现在,您不仅可以使用RTTI解析记录类型,还可以解析任何类型
有关如何在
TValue
上使用RTTI的示例,请参见:从示例中可以看出,fSourceObject
可以是任何对象,无论其结构如何。然后,使用Rtti可封装性,我可以提取结构的所有元素。我需要一种类似的方法来传递任何记录结构,然后使用Rtti,就像我对fSourceObject
所做的那样。如何声明将接收记录的属性?不能。要回答此问题,请改用TValue
属性。使用RTTI和TValue
可以解析有关记录、类等的所有信息。要从记录中获取TValue
,请使用TValue.from(MyRecord))代码>。这或多或少是同一个问题。不,这不是海报想要的。海报希望使用RTTI获取信息。这里的通用代码没有添加任何内容。是的,asker对运行时而不是编译时感兴趣。但他提出这个问题是因为他想构建一个TRtti\u Assistent
类(他是如何称呼它的)。rtti是他想在类中做的事情,他没有询问rtti,而是询问如何将任何记录传递给属性,就像将任何对象传递给TObject
属性一样。使用泛型类,他可以传递他想要的任何记录并对其执行rtti操作。你必须理解编译时和运行时类型之间的区别。泛型要求调用方在编译时知道类型。您的泛型类型没有任何用途。你也可以直接使用记录,我知道运行时和编译时类型的区别。假设他想使用rtti为他的记录值编写一个简单的编辑器,他可以使用rtti编写类。但是他必须将他的记录传递给进行编辑的班级(使用rtti的东西)。例如XSuperObject
还结合了泛型和rtti。在superobject中有一个通用函数,您可以在其中传递记录,它执行rtti操作以生成json字符串。他的问题是:如何声明将接收记录的属性?
只有问题标题是关于rtti的。