2014-05-23 52 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的情況下,第二種方法非常優雅。

相關問題