Tclass到底是什么?

时间:2019-01-22 19:47:58

标签: delphi

在我的程序中,我这样做:

var aObj: Tobject;
var aObjClassType: Tclass;
....
aObjClassType := aObj.ClassType;
....
aObj.free;
aObj := nil;
....
showmessage(aObjClassType.Classname);

这项工作有效,但我不确定这是否正确,尤其是当我阅读函数TObject.ClassType

function TObject.ClassType: TClass;
begin
  Pointer(Result) := PPointer(Self)^;
end;

释放aObj也不会释放aObjClassType吗?

1 个答案:

答案 0 :(得分:6)

TClass是一类。 TObject是一个实例。因此obj.ClassType返回实例obj的类,即类型。

请注意,这是实例的运行时类型,而不是obj参考变量的类型。使用多态性时,这是相关的。因此,如果您写

var
  shape: TShape;
.... 
shape := TSquare.Create;

然后,shape.ClassType返回TSquare,即使shape变量为TShape

  

释放aObj也会不会释放aObjClassType吗?

不。类是静态的,在模块加载时创建,而在模块卸载时销毁。

有关更多详细信息,请阅读文档:http://docwiki.embarcadero.com/RADStudio/en/Classes_and_Objects_(Delphi)#TObject_and_TClass