首页 > 解决方案 > Tclass到底是什么?

问题描述

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

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吗?

标签: delphi

解决方案


ATClass是一个类。ATObject是一个实例。所以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


推荐阅读