gpt4 book ai didi

c# - 将没有签名的委托(delegate)分配给 EventHandler - 这是如何工作的?

转载 作者:行者123 更新时间:2023-11-30 15:45:21 26 4
gpt4 key购买 nike

如果我这样做:

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com