2010-09-19 28 views
9

Mentre l'apprendimento sui metodi anonimi, ho trovato il seguente esempio su internet:Confusione circa i metodi anonimi Parametri

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

capisco perché questo funzionerà:

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

Ma perché questo funziona troppo:

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

Quando il nostro delegato è dichiarato così:

public delegate void MyDelegate(string message); 

Accettare i metodi con stringa come parametro.

risposta

14

Esiste una differenza tra

delegate() { ... 

e

delegate { ... 

Il primo è un metodo anonimo che non ha argomenti, mentre il secondo omette la lista dei parametri del tutto. In questo caso, il compilatore fornisce i parametri per te. Puoi usare questo modulo quando non hai realmente bisogno dei valori dei parametri.

Problemi correlati