理解类引用这种类型

原创 2002年02月25日 08:51:00
问题:
书中写到:
--------------------
类的引用是一种类型,它不是对对象的引用,也不是对类的引用,
而是对类的类型的引用。类的引用类型定义了引用变量的类型。
假设用户定义了一个类:

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;
好了,这下没有明白的话,那真是猪.[:)]
最后一种表达:
你需要什么样的类型,那好,你告诉我你要的类型,我给建一个这样的对象出来。
[:(!][:(!]声明,千万不要误会,我没有骂人,我想这样说,您的印象非常之深刻,更好理解.

C#值类型和引用类型的深入理解

 本篇文章主要是对C#中值类型和引用类型进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助 从概念上看,值类型直接存储其值,而引用类型存储对其值的引用。这两种类型存储在内存的不...
  • liuyuehui110
  • liuyuehui110
  • 2016年08月12日 22:35
  • 1074

Java 如何理解数组在Java中作为一个类?

Java数组的使用语法与C和C++的比较类似,但是它的本质是一个Java类,只是这个类比较特殊,所以很容易被人误解。    大家知道,Java的数据类型可以分为俩种:基本数据类型和引用数据类型。那么数...
  • qq_33642117
  • qq_33642117
  • 2016年08月15日 20:10
  • 933

Java的引用数据类型及应用

Java的数据类型基本数据类型和引用数据类型的区别和联系:一、从概念方面来说基本数据类型:变量名指向具体的数值 引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值二、从内存构建方面...
  • ahafg
  • ahafg
  • 2016年04月15日 10:59
  • 2931

深入JVM之Java引用类型

深入JVM之Java引用类型引用类型可以说是整个Java开发的灵魂所在,如果没有合理的引用操作,那么就有可能产生垃圾问题,但是对于引用也需要有一些合理化的设计。在很多的时候并不是所有的对象都需要被我们...
  • qq_34280276
  • qq_34280276
  • 2016年10月19日 21:36
  • 472

java引用类型的强制类型转换

大神的详解:点击打开链接 简单总结: 1.向上造型:即父类引用指向子类对象,可以自动转换。如: Father father = new Son();   这里的引用father指向内存中对象实质还是S...
  • qq_20289209
  • qq_20289209
  • 2016年10月12日 13:59
  • 2096

VB.net学习笔记(五)数据类型-引用类型(类)

Dim a As Object a = Me CType(a, Form).Text = "本窗体的标题显示在这里" Dim a As St...
  • dzweather
  • dzweather
  • 2013年07月24日 22:36
  • 4634

Java中“引用”的几种类型

强引用:无论内存是否足够,不会回收。 软引用:内存不足时,回收该引用关联的对象。 弱引用:垃圾回收时,无论内存是否足够,都会回收。 虚引用:任何时候都可能被垃圾回收器回收。 ...
  • fyxxq
  • fyxxq
  • 2016年05月28日 10:59
  • 2665

JAVA 【引用类型】和【对象类型】在【继承】中的异同

介绍 JAVA 【引用类型】和【对象类型】在【继承】中的异同,这个问题自己整理过N次,也被人当菜鸟问过N次。所以,在此简单整理一下,以供大家分享。 在继承关系中,一般成员变量是根据引用类型 在...
  • three_man
  • three_man
  • 2014年06月17日 11:31
  • 970

父类类型的引用指向子类的对象

对于多态,可以总结以下几点: 一、使用父类类型的引用指向子类的对象;  二、该引用只能调用父类中定义的方法和变量;  三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用...
  • u014300969
  • u014300969
  • 2014年07月14日 14:05
  • 766

JAVA 对象定义、访问对象、基本类型和引用类型变量区别

定义对象的类  面向对象程序设计(OOP)就是使用对象进行程序设计。对象(object)代表现实世界中可以明确标识的一个实体。例如:一个学生、一张桌子、一个圆、一个按钮甚至一笔贷款都可以看做是一个对...
  • AddisonDing
  • AddisonDing
  • 2015年01月19日 10:17
  • 1878
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:理解类引用这种类型
举报原因:
原因补充:

(最多只允许输入30个字)