我希望WinForm将OnLoad
事件注册到另一个对象 - 例如:
SomeObject.RegisterEvent(action => this.OnLoad += (o,e) => action(o,e));
这可能吗?我不介意在'SomeObject'一侧为'helpers'创建委托或表达式来做这件事,但我想弄清楚我的方法签名对RegisterEvent(...)
的看法是什么样的。
答案 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安装它们并在几分钟内使用。虽然对于更棘手的案例存在学习曲线。
另外,您可以获得将来结合各种活动的好处。
(不是'其中之一',只是一项非常好的新技术)