我想要一个 WinFormOnLoad
用另一个对象注册事件 - 比如:
SomeObject.RegisterEvent(action => this.OnLoad += (o,e) => action(o,e));
这可能吗?我不介意在“SomeObject”端为“助手”创建委托或表达式来执行此操作,但我试图弄清楚我的方法签名对于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;
and _myEvent.OnNext(data)
(进入您想要从中上升的方法)+ 用于公开该字段的属性(IObservable<MyEventData> MyEvent {get{return _myEvent;}}
)。
这才是你真正想要的。
您可以从 NuGet 安装它们并在几分钟内使用。尽管对于更棘手的情况有一个学习曲线。
此外,您还可以从未来的活动组合中获益,还有更多。
(不是“其中之一”,只是一项非常好的新技术)