前言
我有一个 Windows 窗体按钮,它公开事件 OnClick(对象发送者,EventArgs e)。 在我的应用程序中,我可以使用 C# 的经典事件处理技术来处理这个问题:
// Button Creation
Button button = new Button();
button.Click += MyEventHandler;
然后 Windows Form 要求我提供具有以下签名的处理程序:
public void MyEventHandler(object sender, EventArgs e) { }
假设我想使用 lambda 表达式来执行此操作,我可以使用以下语法:
button.Click += (sender, args) =>
{
// execute the code
};
这样做的缺点是我无法取消订阅 Lambda 表达式。
问题
我想做的是拥有一个实用程序类,它允许我处理任何 Click 事件,并使用一个额外的 Action 作为参数。所以我想写这样的东西:
button.Click += MyUtility.Click(()
=> {
// the custom code the Click event will execute
})
我能以某种方式做到吗?
最佳答案
您可以将 lambda 表达式分配给局部变量或字段。
例如:
EventHandler handler = (sender, args) =>
{
// execute the code
};
button.Click += handler;
button.Click -= handler;
如果您想在处理程序中取消订阅,您需要将 handler
分配给 null
,然后再分配给 lambda,以避免明确的分配问题。
关于C# 使用附加参数附加事件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4608689/