我想一個WinForm註冊OnLoad
事件與另一個對象 - 是這樣的:拉姆達可以讓另一個目的是注入動作
SomeObject.RegisterEvent(action => this.OnLoad += (o,e) => action(o,e));
這可能嗎?我不介意在'SomeObject'端創建'helpers'的代理或表達式來執行此操作,但我試圖找出我的方法簽名甚至看起來像RegisterEvent(...)
。
我想一個WinForm註冊OnLoad
事件與另一個對象 - 是這樣的:拉姆達可以讓另一個目的是注入動作
SomeObject.RegisterEvent(action => this.OnLoad += (o,e) => action(o,e));
這可能嗎?我不介意在'SomeObject'端創建'helpers'的代理或表達式來執行此操作,但我試圖找出我的方法簽名甚至看起來像RegisterEvent(...)
。
的RegisterEvent方法需要看起來像這樣:
void RegisterEvent(Action<EventHandler> addEventHandler)
{
addEventHandler((sender, e) =>
{
// loaded
});
}
用法:
someObject.RegisterEvent(handler => { this.OnLoad += handler; });
SomeObject.RegisterEvent(action => { this.OnLoad += (o,e) => {action(o,e);}; });
如果你真的需要有類似的東西(總是一個很好的問題,通常像這樣的事情是一個跡象表明有點奇怪的設計,但不一定是),
我想說你應該看看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安裝它們並在幾分鐘內使用。雖然對於更棘手的案例有一個學習曲線。
此外,您還可以獲得將未來事件與更多事件相結合的好處。
(不是「其中之一」,只是一個非常好的新的技術產品)
對不起,真不明白你正在努力實現..你想構建什麼樣的架構是什麼? – Tigran 2012-04-11 20:52:53