Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
El delegate operador crea un método anónimo que se puede convertir en un tipo delegado. Un método anónimo se puede convertir en tipos como System.Action y System.Func<TResult> tipos usados como argumentos en muchos métodos.
Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4)); // output: 7
Nota:
Las expresiones lambda proporcionan una manera más concisa y expresiva de crear una función anónima. Use el operador => para construir una expresión lambda:
Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 4)); // output: 7
Para obtener más información sobre las características de las expresiones lambda, por ejemplo, capturar variables externas, vea Expresiones lambda.
Al usar el delegate operador , puede omitir la lista de parámetros. Si lo hace, el método anónimo creado se puede convertir en un tipo delegado con cualquier lista de parámetros, como se muestra en el ejemplo siguiente:
Action greet = delegate { Console.WriteLine("Hello!"); };
greet();
Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); };
introduce(42, 2.7);
// Output:
// Hello!
// This is world!
Esa es la única funcionalidad de los métodos anónimos que no admiten las expresiones lambda. En todos los demás casos, una expresión lambda es una manera preferida de escribir código insertado. Puede usar descartes para especificar dos o más parámetros de entrada de un método anónimo que el método no usa:
Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4)); // output: 42
Para la compatibilidad con versiones anteriores, si solo se denomina _un único parámetro, _ se trata como el nombre de ese parámetro dentro de un método anónimo.
Puede usar el static modificador en la declaración de un método anónimo:
Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4)); // output: 14
Un método anónimo estático no puede capturar variables locales ni estado de instancia de ámbitos envolventes.
También se usa la delegate palabra clave para declarar un tipo de delegado.
El compilador puede almacenar en caché el objeto delegado creado a partir de un grupo de métodos. Tenga en cuenta el método siguiente:
static void StaticFunction() { }
Al asignar el grupo de métodos a un delegado, el compilador almacena en caché el delegado:
Action a = StaticFunction;
Especificación del lenguaje C#
Para obtener más información, vea la sección Expresiones de función anónima de la Especificación del lenguaje C#.