射手的博客
学习Delphi,需要一个记录学习的博客,

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;
posted on 2009-03-06 20:13 Archer 阅读(2683) 评论(0)  编辑 收藏 引用 所属分类: Data types (数据类型) 学习
只有注册用户登录后才能发表评论。