我有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;
我不确定我是否做得对。这是安全的代码吗?
答案 0 :(得分:1)
如果您的设计要求该层次结构,那么您的代码是合理的。我使用as
运算符修改它以使用已检查的强制转换。如果类不是所需类型,则会引发运行时错误:
((GetOwner as TbsItems).Owner as TbsManager).Load(Self);