理解类引用这种类型 (转)

本文解析了类引用的概念,通过示例展示了如何使用类引用创建不同类型的对象实例,强调了类引用在运行时创建不确定类型对象的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理解类引用这种类型 (转)[@more@]

问题:

 
 

书中写到: -------------------- 类的引用是一种类型,它不是对对象的引用,也不是对类的引用,而是对类的类型的引用。类的引用类型定义了引用变量的类型。假设用户定义了一个类: type CMyClass=class ... end 下面定义一个新类的引用类型,与下面的类相关: type MyClassRef=calss of CMyClass 这样就声明了两个类型的变量: aClassRef:MyClassRef; aobject:CMyClass; 其中第一个变量引用一个对象,第二个引用类: aClassRef=CMyClass; aObject=CMyClass.Create; -------------------- 这一段我看不明白,请各位解释一下。谢谢


 来自:
 Delphibbs.com/delphibbs/dispu.
 
 ASP?username=Pipi." target=_blank>Pipi., 
 时间:2002-2-8 23:13:00, 
 ID:916427 
 

另外举一个例子吧,比如我可以写一个函数 type TControlClass = class of TControl; procedure insert_control(cls:TControlClass); begin obj;=cls.Create(Application); 把obj放进form end; 调用的时候,如果是 insert_control(TEdit) 那么放进form的是一个编辑框如果是 insert_control(TButton) 那么放进form的是一个按钮谢复杂一点就是 var ctl:TControlClass; ctr:=TEdit; insert_control(ctl) ------------------------------ 注意上面我们用到TButton和TEdit它们都有共同的祖先TControl 我们定义一个基类,然后通过传递不同的子类,那么一个函数只写一次就实现不同的效果


 来自:
 Holyowl, 
 时间:2002-2-8 23:26:00, 
 ID:916440 
 

类引用的用途就是创建在编译器无法确定的对象,举个列子: Type TControlCls = Class of TControl; function CreateComponent(ControlCls: TControlCls): TControl; begin result:=ControlCls.Create(Form1); ... end; 调用时如: CreateComponent(TMemo);//创建TMemo对象 CreateComponent(TEdit);//创建TEdit对象


 来自:
 renrf, 
 时间:2002-2-9 0:07:00, 
 ID:916478 
 

谢谢,我书上的例子怎样理解呢?


 来自:
 Pipi., 
 时间:2002-2-9 0:29:00, 
 ID:916503 
 

你书上的例子就更简单了,根本没讲到实际的用途 就是出现aClassRef的地方你把它看成CMyClass好了


 来自:
 .NET" target=_blank>testnet, 
 时间:2002-2-16 1:17:00, 
 ID:923102 
 

提前提前,我还没看明 Type TControlCls = Class of TControl; function CreateComponent(ControlCls: TControlCls): TControl; begin result:=ControlCls.Create(Form1); ... end; function CreateComponent(ControlCls: TControl): TControl; begin result:=ControlCls.Create(Form1); ... end; 上面这两个东东的结果不是一样吗?有会什么差别??我只注重结果


 来自:
 Pipi., 
 时间:2002-2-16 1:26:00, 
 ID:923112 
 

当然不同了


 来自:
 beta, 
 时间:2002-2-16 2:34:00, 
 ID:923171 
 

to testnet: 将你的两个函数名分别改为 CreateComponent1 和 CreateComponent2 你象这样编译一下: CreateComponent1(TEdit); CreateComponent2(TEdit); 看出 结果 上的差别了吧?


 来自:
 beta, 
 时间:2002-2-16 2:35:00, 
 ID:923172 
 

前者要求传入一个 类, 而后者要求传入一个 对象(类的实例)


 来自:
 beta, 
 时间:2002-2-16 2:43:00, 
 ID:923174 
 

前一个函数将创建你传入的类的一个实例,而后一个函数,没有意义吧.


 来自:
 Jhdandcl, 
 时间:2002-2-16 10:53:00, 
 ID:923281 
 

上面都说得较清楚了, type MyClassRef=calss of CMyClass //表示MyClassRef为指向CMyClass或其父类的指针.


 来自:
 leasun, 
 时间:2002-2-16 11:37:00, 
 ID:923316 
 

类的引用就像指向类的指针一样


 来自:
 testnet, 
 时间:2002-2-16 12:41:00, 
 ID:923408 
 

这个特性不错


 来自:
 xiangya, 
 时间:2002-2-21 1:33:00, 
 ID:931109 | 
 编辑 
 

没有说清楚![:D]看看这里的解释:

 
 

准确的说,这是一种编译器提供的原始二次识别的方法. "我定义很多的类,当然,他们是一个系统的,然后,我把它们统统成为某某类, 当你需要某个类或者类的实例(通常是后者)的时候,你就告诉我那个类的名称, 然后,我就给你那个类,或者类的实例"其实这也不清楚,在后面, "你是一个猪,猪类,他是一个马,马类,我是一个头人,人类," 好了,"我们这些类都统统称为动物类"(实际生活中有动物类吗[?]没有! 都是抽象出来的概念)那么,动物类的实例我们称为某个动物, 现在,屠宰场要买一个动物,好!到底是要一个猪呢,还是一个马吗[?]反正不会是一头人啦. 这样,我们送去一个猪类或者马类(记住,这是类型),不管如何,屠宰场就会得到一个动物. 最后,某个人类的实例就有得吃了[:D] 好好想想,然后对照下面, Type TControlCls = Class of TControl; function CreateComponent(ControlCls: TControlCls): TControl; //这里是在问"你是给我送个马类还是猪类呢[?]" //结果呢,下面的代码送了一个窗口类[:)] begin result:=ControlCls.Create(Form1); ... end; function CreateComponent(ControlCls: TControl): TControl; //在问,你要那一个猪[?] //答:我要窗口1的那个猪[^] begin result:=ControlCls.Create(Form1); ... end; 好了,这下没有明白的话,那真是猪.[:)]

 
 

最后一种表达:

 
 

你需要什么样的类型,那好,你告诉我你要的类型,我给建一个这样的对象出来。

 
 

[:(!][:(!]声明,千万不要误会,我没有骂人,我想这样说,您的印象非常之深刻,更好理解.


 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-992150/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-992150/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值