2016-03-30 105 views
0

我有一個問題,在某些情況下,默認委託不夠用。它需要一個序言和一個postable。我只是想知道是否有更好的叫三重委託三重委託

CSELib.ELib eventLib = new CSELib.ELib(); 
eventLib.Bomb += BombCatcherStart; 
eventLib.Bomb += eventLib.BombCatcher; 
eventLib.Bomb += BombCatcherEnd; 
... 
eventLib.BombRaise(); 

或調用一個委託,然後調用三個

void BombCatcherGroup(CSELib.Elib self) 
{ 
    BombCatcherStart(self); 
    self.BombCatcher(self); 
    BombCatcherEnd(self); 
} 

CSELib.ELib eventLib = new CSELib.ELib(); 
eventLib.Bomb += BombCatcherGroup; 
... 
eventLib.BombRaise(); 

它基本上做同樣的事情,但我只是想知道遠作爲「最佳實踐」而言,是否最好像三聯代表那樣先告訴所有人,或者將其隱藏在單一代表中。

+4

你是什麼意思「告訴所有人前面」?你的意思是「默認代表做得不夠」?你的問題有點不清楚,但它聽起來像最終只是基於意見... –

+0

就最佳做法而言,我會避免第一個。該解決方案假定事件按照與添加順序相同的順序依次觸發。我不認爲這個框架總體上有這樣的保證。 –

+1

也許我正在讀這篇文章,但它確實聽起來像是一個X-Y問題。我更傾向於添加'BeforeBomb'('Bombing'?)和'AfterBomb'('Bombed'?)事件並訂閱每個這些事件。你無法控制還有什麼其他的訂閱炸彈,以及按照什麼順序。說實話,如果沒有你想要做的事情的完整例子,很難說清楚。 –

回答

0

在您的操作形成邏輯鏈的場景中,沒有任何優勢可以將它們作爲單個處理程序添加到同一個事件中 - 除了可以將這些處理程序刪除。如果你不需要/想要這樣做,那麼你就可以完全避免(如果在大多數情況下可以忽略不計)額外的委託調用的開銷,並且至少失去控制執行流的某些能力。如果BombCatcher引發異常,會發生什麼情況?如果您的所有操作都是同一方法定義的一部分,則易於處理;如果你正在處理單獨的代表,那就不那麼容易了。