Delegado (programación)

Un  delegado es una clase que le permite almacenar una referencia a un método con una firma específica (orden y tipos de valores aceptados y devueltos) de una clase arbitraria. [1] [2] [3] [4] . Las instancias delegadas contienen referencias a métodos específicos de clases específicas.

Los delegados se utilizan, en particular, para definir el prototipo de una función de devolución de llamada , como en el modelo de eventos de .NET Framework .

Delegados en C#

Descripción

A partir de la declaración del tipo de delegado, el compilador genera una clase que se deriva de System.MulticastDelegate. Entonces, la firma de una función que toma un delegado como argumento podría verse así:

Public MyFunction ( Delegar otra función );

Una característica adicional de los delegados es que se les puede llamar de forma asincrónica mediante BeginInvoke(). En este caso, se selecciona un grupo de subprocesos libres y la función especificada se ejecuta en paralelo en su contexto. Sin embargo, vale la pena señalar que la cantidad de subprocesos en el grupo es limitada (hay 25 en la implementación actual de .NET), y el resto de las llamadas esperarán su turno.

Un ejemplo de declaración y uso de un delegado

utilizando el sistema ; // Declaración de delegado delegado void MyDelegate ( cadena a ); class DelegateExample { static void Func ( string param ) { Console . WriteLine ( "Función llamada con el parámetro {0}." , param ); } public static void Main () { // Instanciar MyDelegate delegado f = new MyDelegate ( Func ); // Llamar a la función f ( "hola" ); } }

El ejemplo imprime en la consola la línea "Se llamó a una función con el parámetro hola".

Notas

  1. " Delegados (una guía para la programación de C#) Archivado el 6 de septiembre de 2011 en la página Wayback Machine " de MSDN Library
  2. " Delegado - clase Archivado el 6 de septiembre de 2011 en la página de Wayback Machine " en MSDN Library
  3. " MulticastDelegate - Class Archivado el 24 de diciembre de 2011 en la página Wayback Machine " en MSDN Library
  4. Delegados y eventos Archivado el 17 de agosto de 2011 en Wayback Machine // Alexey Dubovtsev, RSDN Magazine #4-2004, 26/03/2005.