我正在创建一个通用列表类,其成员类型为Array(Array of)。 问题是类破坏,因为该类应该用于从继承TObject的字节到类型的类型。
具体做法是:
destructor Destroy;
var elem:T;
begin
/*if(T is Tobject) then //Check if T inherits TObject {Compiler error!}
for elem in FData do TObject(elem).Free;*/ // do not know how to do it
SetLength(FItems,0); //FItems : Array of T
inherited Destroy;
end;
我如何检查T是否为TObject,以便如果typeidenitifier是一个类,我可以释放每个成员吗?
答案 0 :(得分:2)
您可以使用TypeInfo编译器魔术功能获取类型T的类型信息。它返回一个可以强制转换为PTypeInfo的指针,该指针在TypInfo单元中声明。所以:
if PTypeInfo(typeInfo(T)).Kind = tkClass then
//do whatever