类引用和类有什么区别?(50分)

  • 主题发起人 主题发起人 sashion
  • 开始时间 开始时间
S

sashion

Unregistered / Unconfirmed
GUEST, unregistred user!
如题,在什么情况下使用类,什么情况下使用类引用?谢谢!
 
类引用定义的数据类型是一个类名类型,而类定义的数据类型是一个对象类型。类引用一般
用在按照父类相同的类名动态创建对象。
如:
Type TFMclass=Class of TForm
// 定义 TForm 类的引用
Type TMyForm=Class(TForm) // 自定义TForm的子类
....

Var FmTest:TForm
// FmTest为一对象变量
TClassName:TFMClass
// TClassName 为一类名变量
...
TClassName:=TMyForm;
FmTest:=TClassName.Create(nil);

 
为什么要“按照父类相同的类名动态创建对象”?
能否用在参数传递上,比如,是用一个类引用把一个对象传进来。
但是,类引用却使用不了各种属性。这如何解决?
 
使用As 例如 (TClass as TButton).caption:='tt'
 
类引用最普通的用处是,在程序里要使用设计期无法确定的类时。
 
类的引用叫类引用,
类的实例(instance)的引用叫对象引用。
类只是一个类型定义(type declaration),应该没有‘使用类’的说法。
也许你的意思就是对象引用把。
类和对象是两个不同概念,属性是使用对象才有的概念。
类对delphi来说只是有关的类型信息如field的排列,虚方法表,动态方法表等,
类引用所引用的就是类的类型信息本身,它直接指向虚方法表。
类引用在对类本身而不是类的实例操作(如类的实例化)时使用。

button1:=tbutton.create(nil);//实例化
也可以
var aclass:tclass;
...
aclass:=tbutton;//<--
button1:=aclass.create
或者

type cclass=class of twincontrol;

procedure form1.buildsomething(a:tobject;b:cclass);
begin
a:=b.create(self);
end;

var unkown:twincontrol;
....
buildsomething(unknown,tbutton);// unknown is a button
unknown.free;
buildsomething(unknown,tpanel);// unknown is a panel
......





 
应该懂了吧!
 
>>摘自《Delphi 3 开发使用手册》Todd Miller &amp
David Powell 著

*类引用
传统 Pascal 中变量的型(type)仅在程序的编译阶段存在,程序一经编译后变量的
型(type)就固定下来且在程序运行期间不会再改变。对象Pascal则提供了为处理类
类型的构造机制,这种类引用型(class-refrence Type)的声明格式如下:
Class of TMyClass;
类引用型允许在运行时引用类类型,类引用类型和类类型是不同的,它允许定义和类
实例相关的域、方法和属性。从类引用类型的角度看,类类型可以贮存在类引用类型
变量中的值。
....

不抄了,太累,你自己可以看看。这两个人都是Delphi开发组的成员,他们的话应该
不会有错。
 
答案接受了!多谢各位!
 
后退
顶部