Junior
¿Qué es un delegado en C#?
sobes.tech AI
Respuesta de la IA
Un delegado es un tipo de referencia, declarado con la palabra clave delegate. Encapsula un método con una firma específica (tipo de retorno y tipos de parámetros). En esencia, un delegado es un puntero seguro a métodos.
Propiedades principales de los delegados:
- Encapsulación de métodos: El delegado almacena información sobre el método al que hace referencia.
- Seguridad de tipos: El delegado solo puede referirse a métodos cuya firma coincide exactamente con la firma del delegado.
- Multicast: Los delegados pueden referirse a varios métodos simultáneamente. Cuando se invoca un delegado, se llaman todos los métodos asociados en el orden en que fueron añadidos.
Ejemplo de declaración y uso:
// Declaración del delegado
public delegate int MyDelegate(int x, int y);
// Método que coincide con la firma del delegado
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
}
// Uso del delegado
public class Program
{
public static void Main(string[] args)
{
Calculator calc = new Calculator();
// Creación de una instancia del delegado y vinculación con el método Add
MyDelegate del = new MyDelegate(calc.Add);
// Invocación del método a través del delegado
int result = del(5, 3);
System.Console.WriteLine(result); // Salida: 8
}
}
Con la aparición de .NET Framework 3.5 y LINQ, los delegados genéricos integrados se han popularizado ampliamente:
Action<T1, ..., Tn>: Delegado que no devuelve valor (void). Puede aceptar de 0 a 16 parámetros de diferentes tipos.Func<T1, ..., Tn, TResult>: Delegado que devuelve un valor de tipoTResult. Puede aceptar de 0 a 16 parámetros de diferentes tipos.Predicate<T>: Delegado que acepta un parámetro de tipoTy devuelve un valor booleano. Se usa para verificar condiciones.
Tabla comparativa de los delegados integrados:
| Delegado | Valor de retorno | Parámetros | Ejemplo de uso |
|---|---|---|---|
Action |
void |
0..16 parámetros | Realizar una acción sin devolver valor |
Func<TResult> |
TResult |
0 parámetros + valor de retorno TResult |
Cálculo sin datos de entrada |
Func<T, TResult> |
TResult |
1 parámetro de tipo T + valor de retorno TResult |
Transformación de valor |
Predicate<T> |
bool |
1 parámetro de tipo T |
Verificación de condición |
Los delegados se usan ampliamente en el manejo de eventos, operaciones asíncronas, LINQ y para implementar callbacks.