Delegados (Guía de programación de C#)
Un delegado es un tipo que representa referencias a métodos con una lista de parámetros determinada y un tipo de valor devuelto. Cuando se crea una instancia de un delegado, puede asociar su instancia a cualquier método mediante una signatura compatible y un tipo de valor devuelto. Puede invocar (o llamar) al método a través de la instancia 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 una declaración de delegado:
public delegate int PerformCalculation(int x, int y);
Cualquier método de cualquier clase o struct accesible que coincida con el tipo de delegado se puede asignar al delegado. El método puede ser estático o de instancia. Esto permite cambiar las llamadas a métodos mediante programación y agregar nuevo código a las clases existentes.
Nota |
---|
En el contexto de la sobrecarga de métodos, la signatura de un método no incluye el valor devuelto.Sin embargo, en el contexto de los delegados, la signatura sí lo incluye.En otras palabras, un método debe tener el mismo tipo de valor devuelto que el delegado. |
Esta capacidad de 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 podría pasarse 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 los delegados
Los delegados tienen las propiedades siguientes:
Los delegados son como los punteros de función de C++, pero tienen seguridad de tipos.
Los delegados permiten pasar los métodos como parámetros.
Los delegados pueden usarse para definir métodos de devolución de llamada.
Los delegados pueden encadenarse entre sí; por ejemplo, se puede llamar a varios métodos en un solo evento.
No es necesario que los métodos coincidan exactamente con el tipo de delegado. Para obtener más información, vea Utilizar varianza en delegados (C# y Visual Basic).
La versión 2.0 de C# presentó el concepto de Métodos anónimos, los cuales permiten pasar bloques de código como parámetros en lugar de un método definido por separado. En C# 3.0 se presentaron las expresiones lambda como una manera más concisa de escribir bloques de código alineado. Tanto los métodos anónimos como las expresiones lambda (en ciertos contextos) se compilan en tipos de delegado. Juntas, 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, consulte 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#)