Es una forma mucho más concisa de notación de método. Los siguientes son aproximadamente equivalentes:
int MyFunc(int pParam) {
return pParam;
}
Func<int, int> MyFunc = delegate (int pParam) { return pParam; };
Func<int, int> MyFunc = x => x;
int MyFunc(int pParam) =>
pParam;
Piense en una expresión lambda como si dijera "dado algo, devolver algo". En el ejemplo anterior, la expresión lambda x => x
dice "dado x, devuelve x", aunque las expresiones lambda no necesariamente tienen que devolver algo, en cuyo caso podrías leerlas como "dado x, haz algo con x".
También tenga en cuenta que hay tres cosas llamadas "delegar" que pueden ser muy confusas al principio.
Un método anónimo usa la delegate
palabra clave, pero define un método sin nombre:
Func<int, int> = delegate (int x) { return x; };
Asignar un método (anónimo, explícito o lambda) a una referencia hace Delegate
que se cree un objeto contenedor oculto que es lo que permite hacer referencia al método. (Básicamente, una especie de "puntero de función administrada").
Y luego, también puede declarar firmas de métodos nombrados usando la delegate
palabra clave también:
public delegate int TestFunc(int x, int y);
TestFunc myFunc = delegate (int x, int y) { return x + y; };
Esto declara una firma con nombre TestFunc
que toma dos int
sy devuelve an int
, y luego declara una referencia delegada de ese tipo a la que luego se le asigna un método anónimo con una firma coincidente.