声明具有排除参数的委托

  • 本文关键字:参数 排除 声明 c#
  • 更新时间 :
  • 英文 :


我有一个像这样的函数

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);

最新更新