举起传递另一个传递的事件

时间:2014-05-23 09:28:45

标签: c# .net events

我想转发一个活动。目前我在构造函数中拦截了InnerEvent并像这样中继:

obj.InnerEvent+=(...)=>{
    if(OuterEvent != null)
        OuterEvent(...);
}

但它看起来很糟糕所以我发现可以在事件级别使用添加​​/删除关键字来完成中继:

event Handler OuterEvent{
  add{ obj.InnerEvent+=value;}
  remove{ obj.InnerEvent+=value;}
}

但此时我不能再提高我的OuterEvent了。我知道为什么它不可能直接成为可能(read here),但我无法找到一个不错的方法来继续提升我的OuterEvent。我应该像往常一样在构造函数中绑定和中继吗?什么是最好的技术?

1 个答案:

答案 0 :(得分:1)

从某种意义上说,OuterEvent在使用第二种方法时不再作为事件存在。它现在只是一种订阅obj InnerEvent的方式,因此OuterEvent现在与InnerEvent实际上是同一事件:没有代表支持仅调用该事件订阅者的OuterEvent。因此,调用OuterEvent的唯一方法是提升InnerEvent

解决方法是揭露从InnerEvent以外提出obj的方法,但我会考虑这种不良做法。如果您需要从外部类调用OuterEvent,我更喜欢坚持使用第一种方法。在OuterEvent真正仅转发InnerEvent的情况下,第二种方法非常优雅。