如果我这样做:
EventHandler foobar = new EventHandler(fooMethod);
fooMethod 必须是具有以下签名的方法:
public void fooMethod(object obj, EventArgs args){}
对我来说很有意义。然而,这段代码工作得很好:
EventHandler foo = delegate { };
这是怎么回事?我本以为我需要这样做:
EventHandler foo = delegate(object obj, EventArgs arg) { };
顺便说一句,上面这行确实有效。我只是对如何将“空”委托(delegate)分配给 EventHandler 感到困惑。
感谢任何能照亮我的人!
最佳答案
匿名方法(通过delegate {/* body */}
构造委托(delegate)的方式有两种形式:
delegate (parameter list)
{
// body
}
和
delegate
{
// body
}
第二种形式可以转换为任何不使用 out
参数的委托(delegate)类型(IIRC - 它可能无法处理 ref
)假设返回值匹配委托(delegate)类型的返回类型。例如:
Func<int> foo = delegate { return 5; };
如果您不关心参数,这种形式很方便。请注意,它增加了表达式可以转换为的委托(delegate)类型的数量,这可能会混淆重载:
new Thread(delegate { Console.WriteLine("Error - ambiguous"); });
new Thread(delegate() { Console.WriteLine("Fine - ThreadStart"); });
new Thread(delegate(object state) {
Console.WriteLine("Fine - ParameterizedThreadStart");
});
关于c# - 将没有签名的委托(delegate)分配给 EventHandler - 这是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5269701/