create(self) 与 create(application)有何区别(10分)

  • 主题发起人 主题发起人 蛐蛐
  • 开始时间 开始时间

蛐蛐

Unregistered / Unconfirmed
GUEST, unregistred user!
什么情况只能用 SELF 只能用APPLICATION
 
当只有Self能用时只能用Self,只有Application能用时只能用Appliaction。
蛐蛐说:这不是废话吗!:)
 
还是不懂,再指点。
 
self, 类的隐含指针,如在一个窗口程序的过程中: TForm1=class(TForm),self指的是TForm1,
Application:TApplication <-- TComponent <-- TPresident <--TObject
Form :TForm <-- ... <--TWinControl <--...TObject
 
上面的说得很对啊!
 
Suvi说的对。Self是变动的,当你实作不同类的,如:你制作一个Form,或你
做一个自制的控件,当引用Self时就是引用你正在实作的类;而Application
是固定的,就是指你正在作的应用程序,即在一个应用程序当中,Self在不同的
单元(不同的位置)的含义是不同的,而Application则是相同的。
 
可什么情况只能用 APPLICATION 又什么情况只能SELF 我都试过,
可找不到有什么差别。
 
谢谢大家,谢谢飞龙在天
 
除了楼上几位说的区别,用 Self 和用 Application 还有一点区别,就是对象释放的时间:

大家都知道,TComponent.Create的声明形式如下
constructor Create(AOwner: TComponent);
参数AOwner为所创建对象的所有者。

而在释放一个对象时,Delphi会自动释放此对象拥有的所有对象,例如:
MyObj2 := TMyObj2.Create(MyObj1);
MyObj2的所有者是MyObj1,在执行MyObj1.Free的时候,MyObj2会被自动释放。

所以当你以Application为参数创建对象的时候,假如你不去主动释放它,它会在Application对象
释放的时候(也就是程序结束的时候)被释放。
当以Self为参数创建对象的时候,假如你不去主动释放它,它会在这段代码所在的对象释放的时候被
释放,一般是TForm,也可能是其它类型的对象。
 

Similar threads

回复
0
查看
863
不得闲
回复
0
查看
848
不得闲
S
回复
0
查看
784
SUNSTONE的Delphi笔记
S
S
回复
0
查看
750
SUNSTONE的Delphi笔记
S
后退
顶部