Delphi 中的自定义类笔记(一)

原创 2006年06月19日 00:50:00

Delphi 中的自定义类笔记(一)

类的声明

有两种声明办法

一、自定义类的父类delphi内建类

type 类名 = class(父类)

  成员表达式

end;

1)保留字Class说明该类是dephi内建类,将继承父类的属性和方法

2)“父类”默认是delphi的祖先类Tobject

二、完全自定义的类

Type 类名 = object(父类)

  成员表达式

End;

(1)       保留字object说明该类是完全自定义的类

(2)       自类也必须是完全自义的类

注意:class自定义的类必须遵循delphi内建类的Tobject的特定的构造方法和析构方法,而用object自定义类的方法无此限制(内存管理方式),所以用第一种方法生成对象时必须调用Create构造函数,

第二种就不需要,可直接生成对象,它将做为一般变量,和记录(Record)变量相同,用到

时立即分配内存,用完时自动释放内存

 

自定义Delphi内建类的构造和析构

构造函数

Constructor Create(AOwner :Tcomponent) ;override ;

(1)可以根据实际情况改变参数信息(参数个类,类型,顺序,默认值)

(2)若要继承父类的构造函数,可添加inherited create;

析构函数

Destructor destroy ; override ;

(1)   若在自定类中添加了其它类,一定要记得释放这些对象

(2)   若要继承父类

(3)   值得注意的中destroy中删除对象的变量,即对象的参考,未真正删除对象实体,也就没有释放对象所占的内存,另外,若在没有调用create 的情况下,该对象参考的值为nil,这种情况下调用destroy,会产生错误

Free可解决上面的问题(真正释放内存;在没有创建的对象的情况下调用Free也不会报错)

还有一个更实用的FreeAndNIl(对象),它不仅释放内存,而且将对象的参考(变量)赋nil

完全自定义类的构造和析构

自定类也完全可以自己编码自己的构造和析构函数,为其分配内存、释放内存,不免要用到指针,是复杂度很高的工程,此时还是用的自定义的Class比较方便。

类的封装

封装的含义:把个别单元(对象和类)的所有数据和功能(成员变量、成员函数、属性)全部包括它的内部。

封装的目的:防止外界去破坏对象内部结构和数据。只有通过对象对外的接口,才能访问对象内部的数据,对象之间也无法直接访问彼此的数据,必须通过某些信息的传递,而这些信息对调用、执行对象内部的方法,或访问对象内部的属性或字段。

封装的方式delphi中用类(Class)的声明技术。接口部分(interface)用来定义对象外观及对象对外表现的行为,而实现部分(implementation)则用来处理对象内部运行,其内容包括不公开的字段   、方法,甚至属性。

ObjectPascal封装的级别

五个级别

Private

1)这里声明的类成员(包括字段、方法(类方法))只能在类声明的单元内使用。

2)子类可以继续父类的private成员,但无法使用这些成员

该部分声明的方法为类方法,也就是说对象无法直接调用

Protected

1)这里声明的类成员(包括字段、方法(类方法))只能在类声明的单元内使用

2)子类可以继承父类的protected成员,也可以使用,但也只限于类定义的单元

该部分声明的方法同样为类方法,类的对象也无法直接调用

Public

1)这里声明的类成员(包括字段、方法(对象方法))可见度最大,可以在类单元及类对象所在的任何单元使用。

Published

(1)   可见度与public一样,

(2)   public的区别是本区域的成员可以在delphi对象检查器中出现,而此差别来自RTTI机制

RTTI(Run time type Information)是为Published制作它允许应用程序动态查询该类的published的字段、属性(包括属性和事件),并且加载类的方法

RTTI启动条件是有条件的——使{$M+}”编译指令的状态下才能启动RTTI或它的祖先类以上述状态编译,也可以启动RTTI,然后该类检查器才能显示在检查器中。

(3)   除了RTTI条件限制后,published的属性也有类型限制

A. 序数、字符串(string)、classinterface以及mothodpointer类,都可以做published的属性

B. 范围在0-31之间的集合,该集合值必须满足byteworddouble word类才能做published属性

C. 除了Real类外的所有实数类,都可以做为published属性

D.数组类不可以做published属性

E. 所有的成员函数都可以作为published的事件,然而重载override的函数不可以作为published事件

F. 字段Fieled不能作为Published的属性,除非它属于classinterface

Automated

(1)   可见度与Public成员一样

(2)   public差别和publicpublished差别相似,当我们使用自动化服务器(Automation server)时,“Automation Type information”是为auomated成员设置。而所有的Automatic成员只能出现在OleAuto单元,继承自TAutoObject的类里面,且OleAuto单元原本就有默认的Automated区,至于comObj单元,则无法具有Automated

 

Delphi自定义类

重温Delphi之:如何定义一个类 先谈谈工具问题: 虽然d7很经典,但毕竟是02年出的开发工具了,对于习惯了vs2008被微软宠坏的.net程序员来讲,重返d7已经有点找不着感觉了(...
  • Yoryky
  • Yoryky
  • 2014年11月20日 12:56
  • 460

Delphi 7 定义你自己的事件

定义新的事件完全是比较少见。然而,当一个组件介绍行为是完全不同于任何其他组件不同,所以你需要为它定义一个事件。...

Delphi中自定义类和接口

Delphi中自定义类和接口 1.自定义类,例子如下: ...... type TMyObject = class private   FValue : Int...
  • cai5
  • cai5
  • 2013年04月28日 11:46
  • 871

Delphi构造函数和析构函数

 Delphi构造函数和析构函数 2013-08-20 16:31 287人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ...

在Delphi 中用程序实现自定义窗体的创建和显示顺序(2)

在Delphi 中用程序实现自定义窗体的创建和显示顺序(2)    以上方法虽然可以实现动态的有选择地创建和显示窗体,但是有一个致命的弱点,就是程序关闭权限的转移,不能保留Form1的程序关闭权限。怎...

DBGridEh列宽自动适应内容的简单方法

最近遇到了一个问题,就是使用DBGridEh的时候,查询出的信息总是不能很完美的显示(完美……)主要现象就是 DBGridEh属性中提供的选项有AutoFitColWidths这个属性设置成true的...

Delphi中MIDAS的全面学习

(一)MIDAS是什么?   Delphi中MIDAS到底是什么呢?和他相关组件是什么呢? MIDAS(Multitiered Distributed Application Services)...

Delphi语言如何对自定义类进行持久化保存及恢复 (性能远比json/xml高)

Delphi的RTL自身就带有一套很好的资源持久化保存(IDE设计窗体时,保存为DFM格式及编译到EXE里面的资源文件)及恢复机制(EXE启动时对窗体资源的加载),那么应没必要再额外用xml/json...
  • rocklee
  • rocklee
  • 2016年03月18日 11:40
  • 832
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi 中的自定义类笔记(一)
举报原因:
原因补充:

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