2012-10-25 28 views
1

我有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

我對您的措辭有點困惑。你的bsitems不會有加載方法,他們只是叫業主擁有者的方法。 –

+0

@PieterB我不想重寫TbsItem中的Load()代碼,所以我調用了TbsManager的Load方法(它加載了當前的TbsItem)。希望我已經說清楚了。 – JustMe

回答

1

如果你的設計要求這個層次結構,那麼你的代碼是合理的。我會修改它以使用選中的演員,並使用as運算符。如果這些類別不是所需的類型,則會引發運行時錯誤:

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

我懷疑它會運行實例的重載構造函數... –

+1

@ArnaudBouchez我看不到構造函數在哪裏進入此。你可以解釋嗎。 –

相關問題