delphi - 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
吗?
解决方案
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
推荐阅读
- jenkins - emailext attachmentsPattern: '**/target/overview-features.html' 给出异常
- algorithm - 解决这个问题的可能算法
- python - 简单继承的 Cython 编译错误 - 对象没有属性
- arrays - Storing certain array content in a variable
- e2e-testing - 发生 500 xhr 请求时,cypress 测试失败
- javascript - 如何在 react-bootstrap 选择选项中使用翻译
- module - 模块的 NestJs 版本
- api - 为什么我无法显示来自 YouTube 直播的嵌入视频?
- angular - 删除本地文件 Ionic 4
- uml - 如何为无需登录的用户创建一个类?