2016-03-30 60 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引发异常,会发生什么情况?如果您的所有操作都是同一方法定义的一部分,则易于处理;如果你正在处理单独的代表,那就不那么容易了。