Delphi面向对象:编写一个类
来源:互联网 发布:中国2016年农业数据图 编辑:程序博客网 时间:2024/04/29 22:15
Delphi面向对象:编写一个类
这回,我们讨论怎么编写我们自己的第一个类。
在编写我们自己的类之前,首先要说的是“类的继承”。
记得前几天,我在和一个朋友讨论类的特点的时候,他说:“类是可以没有构造方法的!”其实类必须有至少一个构造方法的,但是他的话也不全错,可以理解成“我们可以不实现我们自己的构造方法”。
当我们没有显式的为类编写一个构造方法的时候,那么,看上去,这个类好象是没有构造方法,但是实际上,就算你没有为这个类编写一个属于你自己的构造方法的时候,该类还是有构造方法的;为什么呢?因为,在你选定父类并从父类派生(继承)一个新的后代类的时候,首先,编译器会COPY一份父类中“可继承”的数据成员到新的子类中。
那么,什么是可继承的数据成员呢,我们来看下面的代码:
代码:
TPersistent = class(TObject)
private
procedure AssignError(Source: TPersistent);
protected
procedure AssignTo(Dest: TPersistent); virtual;
procedure DefineProperties(Filer: TFiler); virtual;
function GetOwner: TPersistent; dynamic;
public
destructor Destroy; override;
procedure Assign(Source: TPersistent); virtual;
function GetNamePath: string; dynamic;
end;上面是VCL内部TPersistent类的声明代码,我们可以看到几个关键字private、protected、public,这几个关键字是说明数据成员的访问限制的,其中:
private: 存在于该访问限制下的数据成员只能被本类所访问。
protected: 存在于该访问限制下的数据成员只能被本类及后代类所访问。
public: 存在于该访问限制下的数据成员可以被任何类访问。
published: 存在于该访问限制下的数据成员的访问限制与public一样,但是在本域下的属性将会在注册类的时候被注册给IDE。
automated: 存在于该访问限制下的数据成员为自动成员,常用于定义嵌入(OLE)自动化类型信息的公共接口。 PS: 该域并不常用,这里不做介绍
由此可见,所谓的“可继承”部分是指除"private"域指定的数据成员。
回到上面的问题,由于在继承新类的时候,编译器会COPY一份父类所有可继承部分的数据成员到新的子类中,当没有为新类编写构造方法时,新类会调用父类的构造方法,如果父类中也没有编写构造方法,那么将层层上溯,直到根类TObject中。
就像上面的类,我们可以看到,在类里面的确是没有重写新的构造方法,但是这个类的构造方法却是真实的存在的。
现在,我们可以开始编写第一个属于我们自己的简单的类了:
代码:
type // 说明我们从这里开始往下要声明的是自定义的数据类型
TNewClass = class(TPersistent)
// TNewClass 新类的类名
// TPersistent 父类的类名
private
// 私有域数据成员
protected
// 保护域数据成员
public
// 公共域数据成员
procedure SayHello(); // 我们为类添加的新的方法
published
end; // 类的声名结束
implementation // 实现部分
procedure TNewClass.SayHello;
// SayHello 方法的实现部分
begin
ShowMessage('Hello');
end;至此,我们完成了一个简单的类的编写。
我们可以写一段简单的代码来测试类的工作情况:
代码:
var
NewClass: TNewClass; // 定义一个类 TNewClass 的对象 NewClass
begin
NewClass:= TNewClass.Create; // 为对象 NewClass 分配内存空间,并创建它
NewClass.SayHello(); // 调用 SayHello 方法
NewClass.Free; // 销毁对象并释放对象的内存空间
end;有时,我们会看到这样的声明方式:
代码:
type
TNewClass = class
...
end;这是一种省略父类的声明方式,当省略了父类的时候,DELPHI编译器会把根类TObject当做新类的基类,和
代码:
type
TNewClass = class(TObject)
...
end;
- Delphi面向对象:编写一个类
- Delphi面向对象学习随笔二:编写第一个类
- Delphi面向对象学习随笔五:一个真正的类
- DELPHI面向对象参考
- delphi面向对象程序设计
- 一个使用面向对象方式编写的简单游戏框架
- 以面向对象方式编写一个计算电话费的程序
- c语言编写面向对象的类
- delphi面向对象的部分
- delphi面向对象(1)
- 面向对象编写js格式
- 面向对象编写jQuery插件
- JavaScript 面向对象编写方式
- php (十) 面向对象 抽象一个类
- 面向对象-设计一个Location类
- 一个javascript面向对象类库
- 编写delphi类
- 不到140行的C#代码编写一个简单的面向对象的数据库(OODB)
- 截屏、PNG压缩并远程传输的库
- Delphi面向对象:overload与override
- Google免费企业邮局设置攻略
- JNDI学习笔记(一)
- 前朋友联系你,你会是怎么样的心情呢?
- Delphi面向对象:编写一个类
- 全球黑客顶级赛事落幕 仅Linux幸免于难
- Linux操作系统下Oracle主要监控工具介绍
- 详介oracle的RBO/CBO优化器
- [回顾]清华申请退学博士作品:完全用Linux工作(一)
- Improving Performance for Wlan
- 什么是Python
- 终于20年后真正听完了Beyond的《大地》
- linus