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.
Un delegado es un tipo que representa referencias a métodos con una lista de parámetros determinada y un tipo de valor devuelto. Al crear una instancia de un delegado, puede asociar la instancia de delegado a cualquier método que tenga una firma compatible y un tipo de valor devuelto. 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 son básicamente métodos que se invocan a través de delegados. Al crear un método personalizado, una clase como un control de Windows puede llamar al método cuando se produce un evento determinado.
En el ejemplo siguiente se muestra una declaración de delegado:
public delegate int PerformCalculation(int x, int y);
Puede asignar cualquier método desde cualquier clase o estructura accesible que coincida con el tipo de delegado al delegado. El método puede ser estático o un método de instancia. La flexibilidad le permite cambiar mediante programación las llamadas a métodos o conectar código nuevo a clases existentes.
Nota:
En el contexto de la sobrecarga del método, la firma de un método no incluye el valor devuelto. Sin embargo, en el contexto de los delegados, la signatura sí lo incluye. Es decir, un método debe tener un tipo de valor devuelto compatible como el tipo de valor devuelto declarado por 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. Puede escribir un método que compare dos objetos en la aplicación. Ese método se puede usar en un delegado para un algoritmo de ordenación. Dado que el código de comparación es independiente de la biblioteca, el método de ordenación puede ser más general.
Punteros de función admiten escenarios similares, donde necesita más control sobre la convención de llamada. El código asociado a un delegado se invoca mediante un método virtual agregado a un tipo delegado. Al trabajar con punteros de función, puede especificar convenciones diferentes.
Exploración de las características de delegado
Los delegados tienen las siguientes características:
- 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 se pueden encadenar, como al llamar a varios métodos en un solo evento.
- Los métodos no tienen que coincidir exactamente con el tipo de delegado. Para obtener más información, consulte Usar varianza en delegados.
- Las expresiones lambda son una forma más concisa de escribir bloques de código en línea. Las expresiones lambda (en determinados contextos) se compilan para delegar tipos. Para obtener más información sobre las expresiones lambda, vea Expresiones lambda.
Revisar artículos relacionados
Para obtener más información sobre los delegados, consulte los siguientes artículos:
- Uso de delegados
- Delegados con métodos con nombre y delegados con métodos anónimos
- Uso de varianza en delegados
- Procedimiento para combinar delegados (delegados de multidifusión)
- Cómo declarar, crear instancias y usar un delegado
Acceso a la especificación del lenguaje C#
La especificación del lenguaje es el origen definitivo de la sintaxis y el uso de C#. Para obtener más información, vea Delegados en la especificación del lenguaje C#.