delphi中的类中类(元类)(100分)

W

wxj9527

Unregistered / Unconfirmed
GUEST, unregistred user!
请大家详细讲解下类中类.最好是给点代码说明.
TMyClass = class of TMyObject.
 

地质灾害

Unregistered / Unconfirmed
GUEST, unregistred user!
It is called Meta Class,not 类种类
 
W

wxj9527

Unregistered / Unconfirmed
GUEST, unregistred user!
请具体解释下!谢谢```
 
L

luoyanqing119

Unregistered / Unconfirmed
GUEST, unregistred user!
Tobject是TMyClass的元类:
元类 (meta class),也叫类引用类型 (class-reference type),可以看成是一种类的类型 ,以该类型声明的变量的值代表一个类。比如 : type
TClass = Class of TObject;
因为 TClass 是一个 TObject 类型的元类 ,而 TButton,TForm 等都是自 TObject 派生而来 ,因而 TButton 和 TForm 这样的值对于 AClass 都是可接受的。
我们就可以运用多态的思想 ,灵活运用 AClass 这个类变量了。而这一点也正是下文具体实现的基础知识。
 
L

luoyanqing119

Unregistered / Unconfirmed
GUEST, unregistred user!
VCL中大量运用了这样的设计手法。
 
W

wxj9527

Unregistered / Unconfirmed
GUEST, unregistred user!
关键不明白的是如何运用这个类变量
如:
type
TMyClass = TMyObject
TMyObject_one = class
private
Myclass;TMyClass;
......
end;

按我理解TMyClass就是TMyObject类的一个类型了!
主要是如何运用Myclass ???
请举实例说明~~~
 
L

luoyanqing119

Unregistered / Unconfirmed
GUEST, unregistred user!
TClass = Class of TObject;
  这样就声明了一个元类的类型。然后可以有这样的变量声明 :
  Var
  AClass: TClass;
  那么 ,就可以有这样的用法 :
  AClass := TObject;
  或者 :
  AClass := TButton;
  或者 :
  AClass := TForm;
 
L

luoyanqing119

Unregistered / Unconfirmed
GUEST, unregistred user!
元类的申明后的使用和普通类一样。
 
L

luoyanqing119

Unregistered / Unconfirmed
GUEST, unregistred user!
只是它可以向下转型。------------你可以关注一下DELPHI和模式的一些资料,都讲得很细很全的。
 
L

liuls

Unregistered / Unconfirmed
GUEST, unregistred user!
嗯,luoyanqing119 说得很清楚;

type
TCtrlClass = class of TControl;
procedure TForm1.btn1Click(Sender: TObject);
procedure CreateAControl(ACtrlClass: TCtrlClass;
const LeftPos: Integer);
begin
with ACtrlClass.Create(self)do
begin
Left := LeftPos;
top := 10;
width := 50;
Parent := Self;
end;
end;
begin
CreateAControl(TButton, 10);
CreateAControl(TEdit, 60);
end;
 
W

wxj9527

Unregistered / Unconfirmed
GUEST, unregistred user!
多人接受答案了。
 
顶部