gpt4 book ai didi

c# - 关于匿名方法参数的困惑

转载 作者:太空狗 更新时间:2023-10-29 17:42:38 25 4
gpt4 key购买 nike

在学习匿名方法时,我在互联网上找到了以下示例:

namespace AnonymousMethods
{
public class MyClass
{
public delegate void MyDelegate(string message); //delegate accepting method with string parameter
public event MyDelegate MyEvent;
public void RaiseMyEvent(string msg)
{
if (MyEvent != null) MyEvent(msg);
}
}
class Caller
{
static void Main(string[] args)
{
MyClass myClass1 = new MyClass();

// here the confusion
myClass1.MyEvent += delegate
{
Console.WriteLine("we don't make use of your message in the first handler");
};

myClass1.MyEvent += delegate(string message)
{
Console.WriteLine("your message is: {0}", message);
};

Console.WriteLine("Enter Your Message");
string msg = Console.ReadLine();
myClass1.RaiseMyEvent(msg);
Console.ReadLine();
}
}
}

我明白为什么这会起作用:

myClass1.MyEvent += delegate(string message){
Console.WriteLine("your message is: {0}", message); }

但为什么这也有效:

myClass1.MyEvent += delegate {
Console.WriteLine("we don't make use of your message in the first handler"); }

当我们的委托(delegate)被这样声明时:

public delegate void MyDelegate(string message);

接受以字符串为参数的方法。

最佳答案

有区别

delegate() { ...

delegate { ...

第一个是不接受任何参数的匿名方法,而后者则完全省略了参数列表。在这种情况下,编译器会为您推断参数。当您实际上不需要参数值时,可以使用这种形式。

关于c# - 关于匿名方法参数的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3745607/

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