[转]理解 Delphi 的类(十一) - 深入类中的方法[10] - 构造方法与析构方法
2013-01-16 14:17
507 查看
//构造方法就是对象建立时调用的方法; 析构方法就是对象销毁时调用的方法. 如: 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 博客
相关文章推荐
- 理解 Delphi 的类(十一) - 深入类中的方法[10] - 构造方法与析构方法
- 理解 Delphi 的类(十一) - 深入类中的方法[2] - 关于覆盖与重定义
- 理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类
- 理解 Delphi 的类(十一) - 深入类中的方法[11] - 事件方法
- 理解 Delphi 的类(十一) - 深入类中的方法[12] - 消息方法
- 理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法
- 理解 Delphi 的类(十一) - 深入类中的方法[13] - 方法的调用约定
- 理解 Delphi 的类(十一) - 深入类中的方法[1] - 虚方法与动态方法
- 理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类
- 理解 Delphi 的类(十一) - 深入类中的方法[9] - 不能被覆盖的方法与不能被继承的类
- 理解 Delphi 的类(十一) - 深入类中的方法[5] - 静态方法、类方法、静态类方法
- 理解 Delphi 的类(十一) - 深入类中的方法[6] - 类中的方法重载
- 理解 Delphi 的类(十一) - 深入类中的方法[3] - 方法在实现时的参数省略
- 理解 Delphi 的类(十一) - 深入类中的方法[7] - 关于 inherited
- 理解 Delphi 的类(十一) - 深入类中的方法[4] - 访问限制(或者叫可见性)
- 理解 Delphi 的类(十一) - 深入类中的方法[8] - 抽象方法与抽象类
- 理解 Delphi 的类(十) - 深入方法[10] - 默认参数
- 理解 Delphi 的类(十) - 深入方法[4] - 共同类型的参数的简化写法
- 理解 Delphi 的类(十) - 深入方法[29] - 传址参数不能赋予常量
- 理解 Delphi 的类(十) - 深入方法[24] - 方法是一个指针