博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]理解 Delphi 的类(十一) - 深入类中的方法[10] - 构造方法与析构方法
阅读量:6981 次
发布时间:2019-06-27

本文共 1346 字,大约阅读时间需要 4 分钟。

//构造方法就是对象建立时调用的方法; 析构方法就是对象销毁时调用的方法. 如:TMyClass = class(TObject)public  constructor Create;           {
构造方法} destructor Destroy; override; {
析构方法}end;{
几个要点: 这两个方法都可以追溯到所有类的祖先类 TObject; 它们都属于类方法, 尽管没有 class 标识符; 但和类方法也有区别: 一般的类方法不能使用类中非静态数据; 但它们可以. 必须使用 constructor 和 destructor 来定义, 但名称未必是: Create 与 Destroy; 如果不使用 Create 与 Destroy 的命名会带来很多麻烦, 没必要尝试. 我们自己的代码在 Create 中是执行在父类的 Create 代码之后; 在 Destroy 中执行在之前; 所以, 一般会用这样的语句格式: }constructor TMyClass.Create;begin inherited; //...end;destructor TMyClass.Destroy;begin //... inherited;end;{
Create 是我们用得最多的方法; 但 Destroy 是我们用得最少的方法; 因为通过 Free 调用 Destroy 更安全一些. Destroy 是一个虚方法; Create 在祖先类中虽然是静态方法, 但在很多实用的类中也成了虚方法; 所以在覆盖或重载时应区别对待.}// Create 应该是受到编译器特别对待的一个方法, 譬如:TMyClass = class(TObject)public constructor Create;end;{
从道理上来讲, 这会隐藏或替换了父类的 Create ; 但实际上没有, 编译器肯定要做一个幕后工作!}//再如: TMyClass = class(TObject)public constructor Create(x,y: Integer);end;var Form1: TForm1;implementation{
$R *.dfm}{
TMyClass }constructor TMyClass.Create(x, y: Integer);begin //inherited Create; //...end;{
编译器竟也允许没有 overload 的重载; 竟也允许去掉这句: inherited Create; 如果没有 TObject.Create 方法, 类如何初始化、分配内存? 所以这都是表面现象, 我想编译器会自动 overload、自动 inherited Create 的. 其他方法不会有这些特殊待遇的, 看来哪都有走后门的. } From 万一的 Delphi 博客

 

转载于:https://www.cnblogs.com/yilongm/archive/2013/01/16/2862695.html

你可能感兴趣的文章
类似ngnix的多进程监听用例
查看>>
维护学习的一点体会与看法
查看>>
corosync+pacemaker+crm简单配置
查看>>
easy installation booster system——stream
查看>>
安装flash
查看>>
Spring注解注入
查看>>
物联网设备僵尸网络趋势分析
查看>>
KVM之安装虚拟机
查看>>
docker之基础
查看>>
whoosh学习(1)
查看>>
Java8自定义条件让集合分组
查看>>
【Python 第8课】while
查看>>
spring boot 临时文件过期
查看>>
python 利用模板文件生成配置文件
查看>>
查询表空间使用情况
查看>>
在Java SE中使用Hibernate处理数据
查看>>
grub2 命令行进入系统
查看>>
Mysql INSERT、REPLACE、UPDATE的区别
查看>>
函数循环的理解
查看>>
CCNA 第一章 网际互联
查看>>