在浏览我的一个代码时,我被困在一个声明中,如下所示。
TMyObjectClass = class of TMyObject;
我有点困惑,想知道这句话是什么意思。
由于TMyObjectClass
在声明之上没有声明。
和TMyObject
声明如下:
TMyObject = class(TObject)
private
//some private member declaration
Public
// some public variables
end;
所以,我的问题是声明的含义是什么
TMyObjectClass = class of TMyObject;
以及TMyObjectClass
如何运作?
我对Delphi有点新意,所以请帮助我了解这些类型的声明以及解决方法。
答案 0 :(得分:14)
它们用于处理元类。规范示例是使用
的Delphi流式框架TComponentClass = class of TComponent;
这允许动态绑定到虚拟构造函数。 TComponent
构造函数为virtual
。流式传输框架需要实例化从TComponent
派生的类。它是这样的:
var
ComponentClass: TComponentClass;
Component: TComponent;
....
ComponentClass := GetComponentClassSomehowDoesntMatterHow;
Component := ComponentClass.Create(Owner);
现在,因为TComponent.Create
是virtual
,所以它以多态方式绑定。如果TComponentClass
为TButton
,则会调用TButton.Create
。如果TComponentClass
为TPanel
,则会调用TPanel.Create
。等等。
要实现的最重要的事情是构造的类仅在运行时确定。请注意,许多语言都缺乏此功能,尤其是C ++。