当我需要打电话给业主所有者的方法时该怎么办?

时间:2012-10-25 19:41:51

标签: delphi collections delphi-xe2

我有TbsManager类,它暴露Load方法,如:

 TbsManager = class(TComponent)
 private
   FItems: TbsItems;  
 public
   procedure Load(Item: TbsItem);

TbsItem是一个TCollectionItem,它由TbsItems拥有:

TbsItem = class(TCollectionItem)
TbsItems = class(TCollection)

我希望我的TbsItems具有Load方法(在onwer的所有者类中),这就是我实现它的方式:

procedure TbsItem.Load;
begin
  TbsManager(TbsItems(GetOwner).Owner).Load(Self);
end;

我不确定我是否做得对。这是安全的代码吗?

1 个答案:

答案 0 :(得分:1)

如果您的设计要求该层次结构,那么您的代码是合理的。我使用as运算符修改它以使用已检查的强制转换。如果类不是所需类型,则会引发运行时错误:

((GetOwner as TbsItems).Owner as TbsManager).Load(Self);