Delphi Tclass到底是什么?

Delphi Tclass到底是什么?,delphi,Delphi,在我的计划中,我做: var aObj: Tobject; var aObjClassType: Tclass; .... aObjClassType := aObj.ClassType; .... aObj.free; aObj := nil; .... showmessage(aObjClassType.Classname); 这是可行的,但我不太确定这是否正确,尤其是当我阅读函数TObject.ClassType时 释放aObj也不会释放AOBJClass类型吗?TClass是一个类。T

在我的计划中,我做:

var aObj: Tobject;
var aObjClassType: Tclass;
....
aObjClassType := aObj.ClassType;
....
aObj.free;
aObj := nil;
....
showmessage(aObjClassType.Classname);
这是可行的,但我不太确定这是否正确,尤其是当我阅读函数TObject.ClassType时

释放aObj也不会释放AOBJClass类型吗?

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

请注意,这是实例的运行时类型,而不是obj引用变量的类型。这与使用多态性相关。所以如果你写

var
  shape: TShape;
.... 
shape := TSquare.Create;
然后shape.ClassType返回TSquare,即使shape变量是TShape

那么释放aObj也不会释放aObjClassType吗

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

有关更多详细信息,请阅读文档:

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

请注意,这是实例的运行时类型,而不是obj引用变量的类型。这与使用多态性相关。所以如果你写

var
  shape: TShape;
.... 
shape := TSquare.Create;
然后shape.ClassType返回TSquare,即使shape变量是TShape

那么释放aObj也不会释放aObjClassType吗

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


有关更多详细信息,请阅读文档:

错误。TObject不是一个实例。TObject是所有其他类的最终祖先类。TClass是最基本的类引用类型。类引用类型的实例将类存储为其值。@Marcodor ToObject是一个类型。TObject就是这种类型的实例。他问什么是TClass不是TClass还是TObject。所以TClass是类引用类型。@Marcodor是的,我试图给出一些上下文。错了。TObject不是一个实例。TObject是所有其他类的最终祖先类。TClass是最基本的类引用类型。类引用类型的实例将类存储为其值。@Marcodor ToObject是一个类型。TObject就是这种类型的实例。他问什么是TClass不是TClass还是TObject。所以TClass是一种类引用类型。@Marcodor是的,我试图给出一些上下文。