Delegados predefinidos: Func, Action y Predicate
En C#, Func, Action y Predicate son delegados predefinidos que se utilizan para representar métodos con diferentes firmas. Un delegado es un tipo de referencia que se utiliza para encapsular un método con un conjunto específico de parámetros y un tipo de valor devuelto. Los delegados se utilizan para permitir que los métodos se pasen como argumentos a otros métodos o se devuelvan como valores de otros métodos.
Func es un delegado genérico que se utiliza para representar un método que toma uno o más argumentos de entrada y devuelve un valor de salida. La firma de un delegado Func se define por el número y los tipos de sus parámetros de entrada, seguidos del tipo de su valor de salida. Por ejemplo, Func<int, string> representa un método que toma un argumento entero y devuelve una cadena.
Action es un delegado que se utiliza para representar un método que toma uno o más argumentos de entrada y no devuelve ningún valor. La firma de un delegado Action se define por el número y los tipos de sus parámetros de entrada. Por ejemplo, Action<int, string> representa un método que toma un argumento entero y una cadena.
Predicate es un delegado que se utiliza para representar un método que toma un argumento de entrada y devuelve un valor booleano. Se utiliza comúnmente para comparaciones y para verificar si un objeto cumple ciertos criterios. La firma de un delegado Predicate se define por el tipo de su parámetro de entrada. Por ejemplo, Predicate<int> representa un método que toma un argumento entero y devuelve un valor booleano.
Aquí hay algunos ejemplos de cómo utilizar estos delegados:
// Func
Func<int, int, int> add = (x, y) => x + y;
int result = add(1, 2); // result = 3
// Action
Action<string> print = (s) => Console.WriteLine(s);
print("Hello, world!");
// Predicate
Predicate<int> isEven = (x) => x % 2 == 0;
bool even = isEven(4); // even = true
Aquí hay un ejemplo de cómo se puede utilizar un delegado Func como parámetro en un método:
public static void PrintResult(int x, int y, Func<int, int, int> operation)
{
int result = operation(x, y);
Console.WriteLine(result);
}
public static int Add(int x, int y)
{
return x + y;
}
public static int Multiply(int x, int y)
{
return x * y;
}
static void Main(string[] args)
{
PrintResult(3, 4, Add); // Output: 7
PrintResult(3, 4, Multiply); // Output: 12
}
En este ejemplo, el método PrintResult toma dos argumentos enteros y un delegado Func que toma dos argumentos enteros y devuelve un valor entero. El método PrintResult utiliza el delegado Func para realizar una operación en los dos argumentos enteros y mostrar el resultado.
Los métodos Add y Multiply son métodos que toman dos argumentos enteros y devuelven un valor entero. Estos métodos se pasan como argumentos al método PrintResult utilizando el delegado Func.
https://www.somostechies.com/entendiendo-los-delegados-func-action/
https://www.c-sharpcorner.com/article/func-action-predicate-delegates-in-c-sharp/