关于匿名方法参数的困惑

9

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

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

当我们这样声明代理时:

public delegate void MyDelegate(string message);

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

1个回答

14

在以下两行代码中有区别:

delegate() { ...

delegate { ...

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接