lambda是否允许另一个对象注入一个动作

时间:2012-04-11 20:48:30

标签: c# winforms events lambda

我希望WinForm将OnLoad事件注册到另一个对象 - 例如:

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

这可能吗?我不介意在'SomeObject'一侧为'helpers'创建委托或表达式来做这件事,但我想弄清楚我的方法签名对RegisterEvent(...)的看法是什么样的。

3 个答案:

答案 0 :(得分:2)

RegisterEvent方法需要如下所示:

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

用法:

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果你真的需要这样的东西(总是一个很好的问题,通常这样的事情会告诉我们设计有点奇怪,但不一定是这样),

我会说你应该看看The Reactive Extensions (Rx)... 它们提供了轻松处理和触发您自己的“事件”或多或少的属性或方法(并且没有代表的典型痛苦,添加/订阅或私人限制等,而不是简化一点)。
......这看起来像......

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

...并且在课堂上有简化只有一个Subject<MyEventData> _myEvent;_myEvent.OnNext(data)(进入你想要升起的方法)+公开该字段的属性({{1} })。

这是你真正想要的。

您可以从NuGet安装它们并在几分钟内使用。虽然对于更棘手的案例存在学习曲线。

另外,您可以获得将来结合各种活动的好处。

(不是'其中之一',只是一项非常好的新技术)