0

我想要一个 WinFormOnLoad用另一个对象注册事件 - 比如:

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

这可能吗?我不介意在“SomeObject”端为“助手”创建委托或表达式来执行此操作,但我试图弄清楚我的方法签名对于RegisterEvent(...).

4

3 回答 3

2

RegisterEvent 方法需要如下所示:

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

用法:

someObject.RegisterEvent(handler => { this.OnLoad += handler; });
于 2012-04-11T20:53:44.353 回答
0
 SomeObject.RegisterEvent(action => { this.OnLoad += (o,e) => {action(o,e);}; });
于 2012-04-11T20:55:05.880 回答
0

如果你真的需要这样的东西(总是一个好问题,通常这样的事情表明设计有点奇怪,但不是必须的),

我会说你应该看看The Reactive Extensions (Rx) ...。
它们为处理和触发您自己的“事件”提供了便利,或多或少类似于属性或方法(并且没有委托的典型痛苦,添加/订阅或私有限制等,过于简化了一点)。
......这可能看起来像......

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

...并且在类中,如果仅简化一个Subject<MyEventData> _myEvent;and _myEvent.OnNext(data)(进入您想要从中上升的方法)+ 用于公开该字段的属性(IObservable<MyEventData> MyEvent {get{return _myEvent;}})。

这才是你真正想要的。

您可以从 NuGet 安装它们并在几分钟内使用。尽管对于更棘手的情况有一个学习曲线。

此外,您还可以从未来的活动组合中获益,还有更多。

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

于 2012-04-11T21:05:01.467 回答