2012-04-11 17 views
0

我想一個WinForm註冊OnLoad事件與另一個對象 - 是這樣的:拉姆達可以讓另一個目的是注入動作

SomeObject.RegisterEvent(action => this.OnLoad += (o,e) => action(o,e)); 

這可能嗎?我不介意在'SomeObject'端創建'helpers'的代理或表達式來執行此操作,但我試圖找出我的方法簽名甚至看起來像RegisterEvent(...)

+1

對不起,真不明白你正在努力實現..你想構建什麼樣的架構是什麼? – Tigran 2012-04-11 20:52:53

回答

2

的RegisterEvent方法需要看起來像這樣:

void RegisterEvent(Action<EventHandler> addEventHandler) 
{ 
    addEventHandler((sender, e) => 
    { 
     // loaded 
    }); 
} 

用法:

someObject.RegisterEvent(handler => { this.OnLoad += handler; }); 
+0

*我*似乎混亂誠實... – Tigran 2012-04-11 20:55:31

+0

這應該工作...我會試一試 - 顯然,我試圖找到森林,但無法看到它的樹木... – IAbstract 2012-04-11 21:19:00

0
SomeObject.RegisterEvent(action => { this.OnLoad += (o,e) => {action(o,e);}; }); 
0

如果你真的需要有類似的東西(總是一個很好的問題,通常像這樣的事情是一個跡象表明有點奇怪的設計,但不一定是),

我想說你應該看看The Reactive Extensions (Rx)...
他們提供了處理和解僱你自己的'事件'或多或少像屬性或方法(並沒有代表典型的痛苦,添加/訂閱或私人限制等簡化了一點)的方便。
...這可能看起來像......

someObjectInstance.MyEvent.Subscribe(d=> 
{ 
    // ... your lambda more or less 
}); 

...並在課堂上有,如果只是簡單一個Subject<MyEventData> _myEvent;_myEvent.OnNext(data)(去你想從上升的方法內)+物業公開該字段(IObservable<MyEventData> MyEvent {get{return _myEvent;}})。

這是你真正想要的。

你可以從NuGet安裝它們並在幾分鐘內使用。雖然對於更棘手的案例有一個學習曲線。

此外,您還可以獲得將未來事件與更多事件相結合的好處。

(不是「其中之一」,只是一個非常好的新的技術產品)