分享
 
 
 

理解类引用这种类型

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

问题:

书中写到:

--------------------

类的引用是一种类型,它不是对对象的引用,也不是对类的引用,

而是对类的类型的引用。类的引用类型定义了引用变量的类型。

假设用户定义了一个类:

type

CMyClass=class

...

end

下面定义一个新类的引用类型,与下面的类相关:

type

MyClassRef=calss of CMyClass

这样就声明了两个类型的变量:

aClassRef:MyClassRef;

aObject:CMyClass;

其中第一个变量引用一个对象,第二个引用类:

aClassRef=CMyClass;

aObject=CMyClass.Create;

--------------------

这一段我看不明白,请各位解释一下。谢谢

来自: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好了

来自: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;

好了,这下没有明白的话,那真是猪.[:)]

最后一种表达:

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

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有