2010-09-19 11 views
9

Tout en apprenant sur les méthodes anonymes, j'ai trouvé l'exemple suivant sur Internet:Confusion sur les méthodes anonymes paramètres

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

Je comprends pourquoi cela fonctionnera:

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

Mais pourquoi cela fonctionne aussi:

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

Lorsque notre délégué est déclarée comme ceci:

Accepter les méthodes avec une chaîne en tant que paramètre.
public delegate void MyDelegate(string message); 

Répondre

14

Il y a une différence entre

delegate() { ... 

et

delegate { ... 

La première est une méthode anonyme qui ne prend aucun argument, alors que celui-ci omet la liste des paramètres tout à fait. Dans ce cas, le compilateur déduit les paramètres pour vous. Vous pouvez utiliser ce formulaire lorsque vous n'avez pas réellement besoin des valeurs des paramètres.

Questions connexes