Delphi中所有类都继承自TObject ,Create默认不是虚方法 ,Destroy默认是虚方法.
VCL中组件继承的大多Create都被声明成虚方法了。
在Delphi当中构造函数当中的create与析构函数destroy大部分都是虚方法.可以覆盖.
被覆盖的函数必须是虚(virtual)的,或者是动态(dynamic)的.
(Constructors)构造函数,
用来创建和初始化一个实例对象, 构造函数返回的
对象的引用. 初始化对象是基于传给构造函数的参数值.
当类引用调用构造函数时,若执行过程中发生异常,则自动调用析构函数destroy来销毁不完整的对象.
声明为虚方法的构造函数,和声明为静态时时相同的.虚构造函数允许使用多态.
构造函数的初始化过程:
1.它在堆中为对象分配内存,并设置所有的有序类型的字段为0,把nil赋值给所有的指针和类类型的字段.使所有的字符串类型的字段为空.
2.构造函数中指定的其他动作(命令)开始执行.
在派生类中构造函数的初始化过程:
1.调用继承下来的构造函数,对继承的字段进行初始化.
2.然后对派生类中新引入的字段进行初始化.
(以为构造函数总是把新对象分配的内存进行"清零"<clear>,所以,对象的所有字段开始时都是0<有序类型>,nil<指针和类>,空<字符串>或者unasslgned<变体类型>.所以,除非字段的值不为0或者空值,我们没有必要在构造函数当中初始化各字段);
type
TShape = class(TGraphicControl)
private
FPen: TPen;
FBrush: TBrush;
procedure PenChanged(Sender: TObject);
procedure BrushChanged(Sender: TObject);
public
Constructor Create(Owner: TComponent); override;
Destructor Destroy; override;
...
end;
Constructor TShape.Create(Owner: TComponent);
begin
inherited Create(Owner); // 初始化继承下来的部分
Width := 65; // 改变继承下来的属性
Height := 65;
FPen := TPen.Create; // 初始化新字段
FPen.OnChange := PenChanged;
FBrush := TBrush.Create;
FBrush.OnChange := BrushChanged;
End;