首页 > 学院 > 开发设计 > 正文

理解类引用这种类型

2019-11-18 18:42:01
字体:
来源:转载
供稿:网友
问题:
书中写到:--------------------类的引用是一种类型,它不是对对象的引用,也不是对类的引用,而是对类的类型的引用。类的引用类型定义了引用变量的类型。假设用户定义了一个类: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);beginobj;=cls.Create(application);把obj放进formend;调用的时候,如果是 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;好了,这下没有明白的话,那真是猪.[:)]
最后一种表达:
你需要什么样的类型,那好,你告诉我你要的类型,我给建一个这样的对象出来。
[:(!][:(!]声明,千万不要误会,我没有骂人,我想这样说,您的印象非常之深刻,更好理解.

上一篇:剖析TThread类

下一篇:一个计算器的代码,欢迎大家点评

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
学习交流
热门图片

新闻热点

疑难解答

图片精选

网友关注