2012-04-11 38 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安装它们并在几分钟内使用。虽然对于更棘手的案例有一个学习曲线。

此外,您还可以获得将未来事件与更多事件相结合的好处。

(不是“其中之一”,只是一个非常好的新的技术产品)