C #: métodos anónimos
Discutimos que los delegados se utilizan para hacer referencia a cualquier método que tenga la misma firma que la del delegado. En otras palabras, puede llamar a un método al que un delegado puede hacer referencia utilizando ese objeto delegado.
Anonymous methodsproporcionar una técnica para pasar un bloque de código como parámetro delegado. Los métodos anónimos son los métodos sin nombre, solo el cuerpo.
No es necesario especificar el tipo de retorno en un método anónimo; se infiere de la declaración de retorno dentro del cuerpo del método.
Escribir un método anónimo
Los métodos anónimos se declaran con la creación de la instancia delegada, con un delegatepalabra clave. Por ejemplo,
delegate void NumberChanger(int n);
...
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
El bloque de código Console.WriteLine ("Método anónimo: {0}", x); es el cuerpo del método anónimo.
El delegado podría ser llamado tanto con métodos anónimos como con métodos nombrados de la misma manera, es decir, pasando los parámetros del método al objeto delegado.
Por ejemplo,
nc(10);
Ejemplo
El siguiente ejemplo demuestra el concepto:
using System;
delegate void NumberChanger(int n);
namespace DelegateAppl {
class TestDelegate {
static int num = 10;
public static void AddNum(int p) {
num += p;
Console.WriteLine("Named Method: {0}", num);
}
public static void MultNum(int q) {
num *= q;
Console.WriteLine("Named Method: {0}", num);
}
public static int getNum() {
return num;
}
static void Main(string[] args) {
//create delegate instances using anonymous method
NumberChanger nc = delegate(int x) {
Console.WriteLine("Anonymous Method: {0}", x);
};
//calling the delegate using the anonymous method
nc(10);
//instantiating the delegate using the named methods
nc = new NumberChanger(AddNum);
//calling the delegate using the named methods
nc(5);
//instantiating the delegate using another named methods
nc = new NumberChanger(MultNum);
//calling the delegate using the named methods
nc(2);
Console.ReadKey();
}
}
}
Cuando se compila y ejecuta el código anterior, produce el siguiente resultado:
Anonymous Method: 10
Named Method: 15
Named Method: 30