2014-05-23 55 views
1

我想传达一个事件。目前,我拦截InnerEvent在构造和继电器这样的:举起传递另一个的事件

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

但它看起来不好,所以我找出继电器可以用add事件层级完成/删除关键字是这样的:

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

但此时我不能再提起我的OuterEvent了。我知道为什么它不是直接可能的(read here),但我无法想出一个体面的方式来继续提高我的OuterEvent。我应该像以前一样绑定和继承构造函数吗?最好的技术是什么?

回答

1

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

解决方法是暴露从obj之外InnerEvent的手段,但我会考虑这种不好的做法。如果您需要从外部类调用OuterEvent,我宁愿坚持第一种方法。在OuterEvent确实只是转发InnerEvent的情况下,第二种方法非常优雅。

相关问题