如果我这样做:
EventHandler foobar = new EventHandler(fooMethod);
fooMethod必须是具有以下签名的方法:
public void fooMethod(object obj, EventArgs args){}
对我有意义。但是,这段代码运行得很好:
EventHandler foo = delegate { };
这是怎么回事?我原以为我需要这样做:
EventHandler foo = delegate(object obj, EventArgs arg) { };
以上一行确实有用。我很困惑如何将“空”委托分配给EventHandler。
感谢任何可以照亮我的人!
答案 0 :(得分:4)
匿名方法(通过delegate { /* body */ }
构建委托的方式有两种形式:
delegate (parameter list)
{
// body
}
和
delegate
{
// body
}
第二种形式可以转换为任何不使用out
参数的委托类型(IIRC - 它也可能无法应对ref
)假设返回值与委托的返回类型匹配类型。例如:
Func<int> foo = delegate { return 5; };
如果您不关心参数,这个表格很方便。请注意,它增加了表达式可以转换为的委托类型的数量,这可能会混淆重载:
new Thread(delegate { Console.WriteLine("Error - ambiguous"); });
new Thread(delegate() { Console.WriteLine("Fine - ThreadStart"); });
new Thread(delegate(object state) {
Console.WriteLine("Fine - ParameterizedThreadStart");
});