delphi的TComponent中定义FOwner: TComponent;

来源:百度知道 编辑:UC知道 时间:2024/06/20 06:12:31
delphi中
类TComponent中定义的第一句
TComponent = class(TPersistent, IInterface, IInterfaceComponentReference)
private
FOwner: TComponent;//这个是怎么理解的啊,本人看李维的VCL到了108页就看不下去了,为什么类的定义中就可以定义此类,作用是什么啊

在《Delphi COM深入编程》中第一章的接口中就有一个例子,其中就有个接口有类似的定义,不明白应该怎么理解,有大侠会的指点一下吧.
type
ICompare = interface
['{DDFE0840-E8FB-11D2-9085-0040F6741DE2}']
function CompareWith(ACompare: ICompare; ASortBy: Integer): Integer;
end;

TComponet中的FOwner是用于在组件创建时指定“属主”用的,属主的作用是在于当属主Free的时候自动Free掉其下的所有组件。例:
var
lbl: TLabel;//此处TLabel继承自TComponent
begin
lbl ;= TLabel.Create(Form1);
...
lbl.Free;//通常我们会加上这句,但这里加上就错了
//Delphi会在Form1销毁的时候自动将lbl销
//毁掉
end;
这里TLabel就相当于TComponent,而Form1是TForm类的对象,TForm也是继承自TComponent,既然是这样实现,那在类的定义里楼主所说的情况应该不难理解了吧~~

ICompare = interface //声明一个接口ICompare
['{DDFE0840-E8FB-11D2-9085-0040F6741DE2}'] //全局唯一的ID,用于识别不同的接口

function CompareWith(ACompare: ICompare; ASortBy: Integer): Integer; //此接口所拥有的“动作”,接口本身不实现,由实现接口的类实现此“动作”

TComponent类的FOwner: TComponent;是说FOwner是这个类的对象,是为组件中插入的组件作准备用的(可能是这样,呵呵)
ICompare接口中的ACompare: ICompare;可能是同一类中的对象作比较用的,面向对象的东西嘛——我也不是很明白,呵呵