Delegados (Guía de programación de C#)

Actualización: noviembre 2007

Un delegado es un tipo que define una firma de método y se puede asociar a cualquier método con una firma compatible. Puede invocar (o llamar) al método a través del 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 estructura 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, un algoritmo de ordenación se podría pasar como referencia al método que compara dos objetos. La separación del código de comparación permite programar el algoritmo de forma 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 Covariance and ContravarianceCovarianza y contravarianza en los delegados (Guía de programación de C#).

  • 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

Especificación del lenguaje C#

Para obtener más información, vea las secciones siguientes de Especificación del lenguaje C#.

  • 1.11 Delegados

  • 4.2.6 Tipos de delegado

  • 7.5.5.3 Invocaciones de delegado

  • 15 Delegados

Vea también

Conceptos

Guía de programación de C#

Referencia

Eventos (Guía de programación de C#)

Delegate