三位代表

时间:2016-03-30 06:20:08

标签: c# delegates

我遇到一个问题,默认委托在某些情况下做得不够。它需要序言和后缀。我只是想知道给三重代表打电话是否更好

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();

它基本上做了同样的事情,但我只是想知道“最佳实践”,是否更好地在三重代表中告诉所有人或将其隐藏在单个代表中。

1 个答案:

答案 0 :(得分:0)

在您的操作形成逻辑链的情况下,将它们作为单独的处理程序添加到同一事件中并不是任何专业人员 - 除了这些处理程序可以在轨道上删除。如果您不需要/想要这样,那么您就会产生额外委托调用的完全可避免(如果在大多数情况下可忽略不计)的开销,并且至少失去一些控制执行流的能力。如果BombCatcher抛出异常会怎样?如果所有操作都属于同一方法定义,则易于处理;如果你要处理不同的代表,那就不那么容易了。