2010-09-19 94 views
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); 

接受字符串作爲參數的方法。

回答

14

delegate() { ... 

delegate { ... 

首先是匿名方法,它沒有參數之間的差,而後者完全省略了參數列表。在這種情況下,編譯器爲您推斷參數。如果您實際上不需要參數的值,則可以使用此表單。