这是一个称为类类型的声明,通常用在用一个基类来创建不同子类的地方, 同样,你也可以写 TControlClass = class of TControl; var classtype : TControlClass; begin classtype := TWinControl; classtype.Create(nil); classtype := TForm; classtype.Create(nil); end;尤其是,你试图写一个对象创建工厂类的时候,如 function GetControl(ClassType: TControlClass): TControl; begin Result := ClassType.Create(nil); end; 你可以在任何地方使用 GetControl(TForm); GetControl(TDbGrid)等等 另外,该类型还可以得到类的一些基本信息等,看delphi的帮助会讲解得很详细的.
这是一个 class-referrence type. 其实,类引用有很多用处 比如:在一个function中你不知道将来会创建一个TButton还是TEdit等等对象,但他们都是TControl的子类就可以有如下代码: TControlClass = class of TControl; function CreateMyControl(mycontrol: TControlClass); var l_control: TControl; begin l_control := mycontrol.create; l_control.left := 100; l_control.top := 20; end;然后,你可以这样来调用: CreateMyControl(TEdit); CreateMyControl(TButton);如果function CreateMyControl(myControl: TControlClass); 改成function CreateMyControl(myControl: TControl); 那么只能传入(TControl); 只能这样调用 CreateMyControl(TControl); 而无法CreateMyControl(TEdit);其实实现了类的多态性,使得类创建更加灵活。
http://community.csdn.net/Expert/topic/4921/4921458.xml?temp=.7612268
同样,你也可以写
TControlClass = class of TControl;
var
classtype : TControlClass;
begin
classtype := TWinControl;
classtype.Create(nil);
classtype := TForm;
classtype.Create(nil);
end;尤其是,你试图写一个对象创建工厂类的时候,如
function GetControl(ClassType: TControlClass): TControl;
begin
Result := ClassType.Create(nil);
end;
你可以在任何地方使用
GetControl(TForm); GetControl(TDbGrid)等等
另外,该类型还可以得到类的一些基本信息等,看delphi的帮助会讲解得很详细的.
其实,类引用有很多用处
比如:在一个function中你不知道将来会创建一个TButton还是TEdit等等对象,但他们都是TControl的子类就可以有如下代码:
TControlClass = class of TControl;
function CreateMyControl(mycontrol: TControlClass);
var
l_control: TControl;
begin
l_control := mycontrol.create;
l_control.left := 100;
l_control.top := 20;
end;然后,你可以这样来调用:
CreateMyControl(TEdit);
CreateMyControl(TButton);如果function CreateMyControl(myControl: TControlClass);
改成function CreateMyControl(myControl: TControl);
那么只能传入(TControl);
只能这样调用 CreateMyControl(TControl);
而无法CreateMyControl(TEdit);其实实现了类的多态性,使得类创建更加灵活。