打印本文 打印本文 关闭窗口 关闭窗口
DELPHI面向对象参考
作者:武汉SEO闵涛  文章来源:敏韬网  点击数3693  更新时间:2009/4/23 18:26:21  文章录入:mintao  责任编辑:mintao

DELPHI面向对象参考

陈奇 2005-07-21

一、类和对象

类是对象的类型,是创建对象的模板。一个类可以创建多个对象,而一个对象总是属于某个类。类具有内部的属性(状态)和行为(操作)。

对象是类的实例,具有区别于同类其他对象的属性集合。

对象的声明存放于堆栈,对象的引用存放于堆。

二、类的方法分类

1、  普通方法

不加任何修饰的方法为普通方法。普通方法必须调用类的实例进行访问。即必须

建类的对象,调用方式为:对象.方法,声明方式为:

procedure[function] 方法名(参数表)[:返回值];

2、  构造方法

构造方法用于创建类的实例,调用后返回类的句柄。构造方法可以有多个版本。声明方式是:

          constructor 构造方法名(参数表);

3、  析构方法

析构方法用于销毁类的实例,一般不建议直接调用析构方法,而采用调用对象.Free的方式进行对象释放。声明方式为:

destructor 析构方法名(参数表);

4、  类方法

类方法属于一个类,在运行时即存在于内存中。可使用类.方法的方式进行调用,即不需要创建类的实例。声明方式是在普通方法前加class

class procedure[function] 方法名(参数表)[:返回值];

5、  消息处理方法

消息处理方法和一个唯一的消息ID进行关联,用于响应动态分派的消息。声明方式:

procedure 方法名(消息变元);message 消息ID;

三、多态、继承、重载

1、  静态方法

静态方法由对象的类决定。属于“早期联编”,即在编译阶段就决定了方法的实现版本。一个类的实例可创建为其他类的实例,但是调用到同名方法时,使用的方法是声明该实例的类的静态方法,声明方式:

procedure[function] 方法名(参数表)[:返回值];

2、  虚拟方法

虚拟方法可实现“后期联编”,即在程序运行时可动态调用不同的方法版本,实现多态。所有类的虚拟方法在内存中建立了一张VMT(虚拟方法表),在调用时动态定位方法函数的位置。比动态方法多占用内存空间,但是速度较快。声明方式:

procedure[function] 方法名(参数表)[:返回值];virtual;

3、  动态方法

虚拟方法可实现“后期联编”,即在程序运行时可动态调用不同的方法版本,实现多态。本类的动态方法在内存中建立了一个DMT(动态方法表),在调用时根据动态方法唯一的编号定位方法地址。比虚拟方法少占用内存,但是速度较慢(因为可能用到祖先类的动态方法)。声明方式:

procedure[function] 方法名(参数表)[:返回值];dynamic;

4、  抽象方法

抽象方法不提供方法的实现脚本。只提供一个方法的签名(方法名称、参数表、返回值)。一般在高级别类中使用抽象方法。派生类对抽象方法进行覆盖、重载实现抽象方法脚本。使用抽象方法,必须创建实现了抽象方法的类(一般为派生类)才可使用。因为抽象方法也属于“后期联编”,因此必须和虚拟方法、动态方法结合,声明方式:

procedure[function] 方法名(参数表)[:返回值];virtual;abstract;

procedure[function] 方法名(参数表)[:返回值];dynamic; abstract;

抽象方法提供了一种从高层次视图观察对象的方式

5、  方法覆盖

在父类中生命的静态方法、虚拟方法、动态方法,都可在派生类中进行同名签名登记。这将覆盖父类的这些方法。提供更特殊的功能,声明方式:

procedure[function] 方法名(参数表)[:返回值];override;

方法的覆盖提供了对类的多态性

6、  方法重载

在父类中生命的静态方法、虚拟方法、动态方法,都可在派生类中进行同名签名登记,但是需要不同的参数表。这将重载父类的这些方法。提供更特殊的功能,声明方式:

procedure[function] 方法名(参数表)[:返回值];overload;

方法的重载提供了对类的扩充性

四、reintroduceselfisas

1、  r

[1] [2] [3] [4] [5]  下一页

打印本文 打印本文 关闭窗口 关闭窗口