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/