gpt4 book ai didi

delphi - Tclass到底是什么?

转载 作者:行者123 更新时间:2023-12-02 01:38:16 34 4
gpt4 key购买 nike

在我的程序中我这样做:

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

So does freeing aObj will not also free the aObjClassType?

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

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

关于delphi - Tclass到底是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54315452/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com