在我的程序中,我这样做:
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
吗? 最佳答案
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
关于delphi - Tclass到底是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54315452/