2011-05-15 21 views
9

¿Podría alguien explicar qué métodos anónimos hay en C# (en términos simplistas) y proporcionar ejemplos posibles?¿Qué son los métodos anónimos en C#?

+1

Puede encontrar aquí las respuestas útiles: http://stackoverflow.com/questions/208381/whats-the-difference-between-anonymous-methods-c-2-0-and-lambda-expressions –

Respuesta

19

Se introdujeron métodos anónimos en C# 2 como una forma de crear instancias delegadas sin tener que escribir un método diferente. Pueden capturar variables locales dentro del método adjunto, convirtiéndolas en una forma de cierre.

un método anónimo se ve algo como:

delegate (int x) { return x * 2; } 

y se debe convertir a un tipo de delegado específica, por ejemplo, a través de la asignación:

Func<int, int> foo = delegate (int x) { return x * 2; }; 

... o suscribirse un controlador de eventos:

button.Click += delegate (object sender, EventArgs e) { 
    // React here 
}; 

Para obtener más información, consulte:

cuenta que las expresiones Lamdba en C# 3 tienen casi métodos anónimos sustituido completamente (aunque siguen siendo totalmente válida, por supuesto). Los métodos anónimos y las expresiones lambda se describen colectivamente como funciones anónimas.

+0

También vale la pena agregar que los métodos anónimos existen en el ámbito local, lo que significa que no se pueden compartir en ningún otro lugar del programa ni exponerlo. Si necesita reutilizar el código, necesita escribir un método de dedicación al que se pueda llamar. – Damian

+0

@Damian: No creo que valga la pena llamarlo así. No puedo recordar que alguna vez aparezca como algo que alguien * ha * querido hacer (a diferencia de * tipos * anónimos). Creo que es obvio solo por la sintaxis. –

5

Un método anónimo es un bloque de código que se usa donde normalmente se requiere un método y que no tiene nombre (por lo tanto, anónimo).

MSDN tiene examples of using anonymous methods.

+0

así que lo haría no es necesario crear una clase, entonces? ¿Y asumo que se puede llamar al método desde cualquier otro método? – James

+0

@Juegos - No, no necesita crear una clase para mantener el método anónimo. Se puede llamar al método desde cualquier lugar al que se le pase; no puede llamarlo más adelante sin hacer referencia a él, es anónimo. –

+1

Gracias, ¿puedes especificar un caso en el que se requiera un método anónimo? – James

10

método anónimo es el método que simplemente no tiene nombre y este método se declara en su lugar, por ejemplo:

Button myButton = new Button(); 
myButton .Click += 
delegate 
{ 
    MessageBox.Show("Hello from anonymous method!"); 
}; 
+0

¿Esto es implícitamente una acción? Si asignara esto a una variable y luego agregara la variable a 'myButton.Click', tendría que usar EventHandler para el tipo de variable aunque no use los parámetros. –

4

Estos son métodos sin nombre.

Por ejemplo, el método ordinario es:

public void Foo() 
{ 
    Console.WriteLine("hello"); 
} 

Mientras método anónimo puede ser:

myList.ForEach(item => Console.WriteLine("Current item: " + item)); 

El código dentro del ForEach es en realidad un método, pero no tiene nombre y no se puede llamar desde el exterior

+4

No es un método anónimo, es una expresión lamdba. Las expresiones de Lambda y los métodos anónimos se denominan colectivamente funciones anónimas. –

+0

Gracias @Jon Solo quería seguir con las palabras simples según la solicitud de OP "en términos simplistas". Saludos por 300K! ;) –

Cuestiones relacionadas