如何检查TypeIdenitifier(T)是否是一个对象?

时间:2010-04-24 16:34:40

标签: delphi generics delphi-2009 generic-programming

我正在创建一个通用列表类,其成员类型为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是一个类,我可以释放每个成员吗?

1 个答案:

答案 0 :(得分:2)

您可以使用TypeInfo编译器魔术功能获取类型T的类型信息。它返回一个可以强制转换为PTypeInfo的指针,该指针在TypInfo单元中声明。所以:

if PTypeInfo(typeInfo(T)).Kind = tkClass then
  //do whatever