Delegados (Guía de programación de C#)
Un delegado es un tipo que define una firma de método. Al crear instancias de un delegado, puede asociar su instancia con cualquier método mediante una firma compatible. Puede invocar (o llamar) al método a través de la instancia de delegado.
Los delegados se utilizan para pasar métodos como argumentos a otros métodos. Los controladores de eventos no son más que métodos que se invocan a través de delegados. Cree un método personalizado y una clase como un control de Windows podrá llamar al método cuando se produzca un determinado evento. En el siguiente ejemplo se muestra la declaración de un delegado:
public delegate int PerformCalculation(int x, int y);
Cualquier método de cualquier clase o struct accesible que coincida con la firma del delegado, la cual está compuesta por los parámetros y el tipo de valor devuelto, puede asignarse al delegado. El método puede ser un método estático o un método de instancia. Esto permite el cambio mediante programación de las llamadas a métodos y la incorporación de nuevo código en las clases existentes. Si conoce la firma del delegado, puede asignar su propio método.
Nota
En el contexto de la sobrecarga de métodos, la firma de un método no incluye el valor devuelto. Sin embargo, en el contexto de los delegados, la firma sí incluye el valor devuelto. En otras palabras, un método debe tener el mismo valor devuelto que el delegado.
Esta capacidad para hacer referencia a un método como parámetro hace que los delegados sean idóneos para definir métodos de devolución de llamada. Por ejemplo, una referencia a un método que compara dos objetos se puede pasar como argumento a un algoritmo de ordenación. Dado que el código de comparación está en un procedimiento independiente, el algoritmo de ordenación se puede escribir de manera más general.
Información general sobre delegados
Los delegados tienen las propiedades siguientes:
Los delegados son similares a los punteros a función de C++, pero poseen seguridad de tipos.
Los delegados permiten pasar los métodos como parámetros.
Los delegados pueden utilizarse para definir métodos de devolución de llamada.
Los delegados pueden encadenarse; por ejemplo, se puede llamar a varios métodos en un solo evento.
No es necesario que los métodos coincidan exactamente con la firma de delegado. Para obtener más información, vea Utilizar varianza en delegados (C# y Visual Basic).
La versión 2.0 de C# introdujo el concepto de métodos anónimos, los cuales permiten pasar bloques de código como parámetros en lugar de utilizar métodos definidos independientemente. C# 3.0 introdujo las expresiones lambda como una manera más concisa de escribir bloques de códigos insertados. Tanto los métodos anónimos como las expresiones lambda (en ciertos contextos) se compilan como tipos delegados. En conjunto, estas características se conocen ahora como funciones anónimas. Para obtener más información sobre las expresiones lambda, vea Funciones anónimas (Guía de programación de C#).
En esta sección
Cuándo se utilizan delegados en lugar de interfaces (Guía de programación de C#)
Delegados con métodos con nombre y delegados con métodos anónimos (Guía de programación de C#)
Cómo: Combinar delegados (delegados de multidifusión) (Guía de programación de C#)
Cómo: Declarar un delegado, crear instancias del mismo y utilizarlo (Guía de programación de C#)
Especificación del lenguaje C#
Para obtener más información, vea la Especificación del lenguaje C#. La especificación del lenguaje es la fuente definitiva de la sintaxis y el uso de C#.
Capítulos destacados del libro
Delegates, Events, and Lambda Expressions en C# 3.0 Cookbook, Third Edition: More than 250 solutions for C# 3.0 programmers
Delegates and Events en Learning C# 3.0: Master the fundamentals of C# 3.0
Vea también
Referencia
Eventos (Guía de programación de C#)