Junior
¿Qué son los delegados en C# y para qué se utilizan?
sobes.tech AI
Respuesta de la IA
Los delegados en C# son punteros seguros en cuanto a tipos a métodos. Encapsulan un método, permitiendo pasarlo como parámetro o usarlo como tipo de variable.
Se utilizan para:
- Implementación del patrón observador (Observer): Los eventos en C# se basan en delegados. El emisor notifica a los suscriptores llamando al delegado.
- Llamadas de retorno (Callbacks): Pasar un método como argumento a una función que lo llamará más tarde.
- Programación genérica: Los delegados
ActionyFuncpermiten crear métodos genéricos que trabajan con diferentes tipos de firmas. - Programación paralela y asíncrona: Los métodos para ejecutar en otros hilos o de forma asíncrona a menudo se pasan mediante delegados.
- LİNQ: Los operadores LINQ utilizan activamente delegados para definir condiciones de filtrado, transformación, etc.
Ejemplo de declaración y uso de un delegado:
// Declaración de un delegado con firma void y un argumento de tipo int
public delegate void MyDelegate(int x);
public class MyClass
{
public void PrintNumber(int num)
{
Console.WriteLine($"Número: {num}");
}
public static void Main(string[] args)
{
// Crear una instancia del delegado que apunta al método PrintNumber
MyDelegate del = new MyDelegate(new MyClass().PrintNumber);
// Llamar al método a través del delegado
del(10);
}
}
Ejemplo con Action (para métodos void sin valor de retorno):
using System;
public class OtherClass
{
public void ExecuteAction(Action action)
{
action(); // Ejecutar el delegado pasado
}
public static void Main(string[] args)
{
Action myAction = () => Console.WriteLine("¡Hola desde Action!");
new OtherClass().ExecuteAction(myAction);
}
}
Ejemplo con Func (para métodos con valor de retorno):
using System;
public class ThirdClass
{
public int Calculate(Func<int, int, int> operation, int a, int b)
{
return operation(a, b); // Ejecutar la operación pasada y devolver el resultado
}
public static void Main(string[] args)
{
Func<int, int, int> add = (x, y) => x + y;
int result = new ThirdClass().Calculate(add, 5, 3);
Console.WriteLine($"Resultado de la suma: {result}");
}
}