Delphi 中友元问题:请高手指点迷津,多谢了。
看下列代码:
//*************************************************************
constructor TComponent.Create(AOwner: TComponent);
begin
FComponentStyle := [csInheritable];
if AOwner <> nil then AOwner.InsertComponent(Self);
end;
//*************************************************************
procedure TComponent.InsertComponent(AComponent: TComponent);
begin
AComponent.ValidateContainer(Self);
ValidateRename(AComponent, '', AComponent.FName);
Insert(AComponent);
AComponent.SetReference(True);
if csDesigning in ComponentState then
AComponent.SetDesigning(True);
Notification(AComponent, opInsert);
end;
//*************************************************************
procedure TComponent.Insert(AComponent: TComponent);
begin
if FComponents = nil then FComponents := TList.Create;
FComponents.Add(AComponent);
AComponent.FOwner := Self;
end;
在“将要创建的对象 ”的构造函数执行时,会向“宿主对象”发消息:AOwner.InsertComponent(Self);
“宿主对象”在接到消息时 会调用 “宿主对象”的一个私有方法
Insert(AComponent);
在 “宿主对象”的方法Insert(AComponent)执行时竞然访问了“将要建的对象”的私有成员AComponent.FOwner := Self;
有书上说 当几个类 的声明在同一个单元文件中时 这几个类互为友元。
那么“将要创建的对象”所属的类很能不会与 Tcomponet 同在一个单元。所以我想书上说法不正确,
但是 上述问题应怎样解决?