我有一个像这样的函数
public void foo(string st; bool x)
我必须以这种方式将其作为委托传递给事件处理程序:
eventhndl += foo
但是,它需要少 1 个参数。
如何通过声明它必须获取的值来使委托排除参数,如以下(不起作用)示例所示:
eventhndl += foo(x=true)
没有遇到参数安装错误?
您可以使用 lambda 像这样绑定参数:
eventHandler += s => foo(s, true);
简单的答案:你不能
长答案:委托表示函数签名,因此它必须与实例指向的函数完全匹配。
要解决此问题,您可以在 C# 上使用旧方法处理可选参数、重载:
void myFunction(bool a, bool b)
{
}
void myFunction(bool a)
{
myFunction(a, true);
}
delegate myDelegate(bool a);
event myDelegate myEvent;
//...
myEvent += myFunction;
通过这种方式,您还可以在代码的其他位置使用重载。
或者,如果您更喜欢更简洁但可读性较低的代码,那么您可以随时使用 lambda:
myEvent += (a) => myFunction(a, true);