◎◎◎◎◎◎关于组件创建问题◎◎◎◎◎◎◎◎(50分)

  • 主题发起人 主题发起人 3333W
  • 开始时间 开始时间
3

3333W

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么创建组件一定要有一下两个东西
public
constructor Create (AOwner: TComponent); override;
destructor Destroy; override;
分别是什么意思!!!
书上有说,但是看不懂,麻烦用通俗易懂得语言讲解一下!!!

其中AOwner 是拥有者的意思吗!! 如果是的话,为什么要有个A字!!!
帮助里面只能查到Owner!!!
 
实在是受不了你啊。为什么吃了饭还要拉大便啊。而且还从肛门出来。呵呵。
 
老大!!! 你的比喻对于我来说太深奥了!!!
 
受不了!不过还是解释一下:
AOwner: TCompone:你知道函数(过程)的形参吧,这个AOwner就是函数(过程)的形参,
名字随便取,你爱叫什么叫什么,只不过叫AOwner比较好理解些!

>为什么创建组件一定要有一下两个东西
> public
> constructor Create (AOwner: TComponent); override;
> destructor Destroy; override;
不明白你的意思,你是说创建组件吗?当然要先调用创建(Create)方法创建组件,用完
后当然也要调用释放(Free,Destroy不能直接调用,Free会自动调用Destroy)方法释放
组件;如果你是要自己写组件,以上两个并不是必须要的!

唉,还是受不了!
 
基本常识
 
Constructor 是对象的构造方法,一般重写控件的时候,对于控件的默认属性都是在这里设定
的,如果你的控件要初始化什么对象,例如TStrings, TList, 或者动态创建什么控件的话,就
也是要在这里做.
如果创建了对象,那么一定要负责他的释放工作,这个工作就在Destructor - 析构方法里面做,
因为一个控件被释放的时候,一定会执行此方法.按照"谁创建-谁释放"的原则,你需要在这里释
放你在构造函数里面创建的对象.

另外,有些属性如果在构造函数里面不能设的话,那么可以在Loaded方法里面设置,这个方法在
控件从"流"里面调用完毕的时候调用.

构造函数和析构函数都是根对象TObject的方法,如果要写的话,一定要用Override, 或者
reintroduce(如果参数原型不同的话).
 
还有一点忘记说了,就是关于AOwner, 文档中的Owner是Component的属性,这里的AOwner是参数.
按照Delphi的编码习惯,方法的参数名一般以A开头,方法的局部变量或者是对象的私有成员变量
(Private)一般以F打头.

Owner 是表示这个对象是谁拥有(也就是是谁负责释放他), 不过一般的来说是创建他的对象拥有
他创建的子对象,所以一般构造函数中是这样的

constrctor Create(AOwner: TComponent); override;
begin
inheritec Create(AOwner);
...
end;

,到TComponent.Create那里,就是 FOwner := AOwner 了.
可以看到,这里的A 和F实际是区别变量的一种起名方式而已,没有特别的意义.
 
constrctor 中的 inherited Create(AOwner) 是一种显式调用父方法的方式,也可以简单的写成 inherited;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
后退
顶部