2010-09-19 16 views
9

Si bien el aprendizaje de los métodos anónimos, he encontrado el siguiente ejemplo en el Internet:La confusión acerca de los métodos anónimos parámetros

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

entiendo por qué esto va a funcionar:

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

Pero por qué esto funciona demasiado:

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

Cuando nuestro delegado se declara así:

public delegate void MyDelegate(string message); 

Aceptando métodos con string como parámetro.

Respuesta

14

hay una diferencia entre

delegate() { ... 

y

delegate { ... 

El primero es un método anónimo que no toma argumentos, mientras que el segundo omite la lista de parámetros en conjunto. En este caso, el compilador infiere los parámetros por usted. Puede usar este formulario cuando realmente no necesite los valores de los parámetros.

Cuestiones relacionadas