Cómo trabajar con delegados Action, Func y Predicate en C #

Un delegado es un puntero de función de tipo seguro que puede hacer referencia a un método que tiene la misma firma que la del delegado. Los delegados se utilizan para definir métodos de devolución de llamada e implementar el manejo de eventos, y se declaran utilizando la palabra clave "delegado". Puede declarar un delegado que puede aparecer solo o incluso anidado dentro de una clase.

¿Qué son los delegados de Func y Action? ¿Cómo se pueden utilizar?

La diferencia básica entre los delegados de Func y Action es que mientras que el primero se usa para los delegados que devuelven valor, el segundo se puede usar para aquellos delegados en los que no tiene ningún valor de retorno.

Func es un delegado que apunta a un método que acepta uno o más argumentos y devuelve un valor. La acción es un delegado que apunta a un método que a su vez acepta uno o más argumentos pero no devuelve ningún valor. En otras palabras, debe usar Action cuando su delegado apunta a un método que devuelve void.

Un predicado es un delegado que acepta uno o más parámetros genéricos y devuelve un valor booleano; puede asumir que es algo como Func. Los delegados de predicado se utilizan normalmente para realizar operaciones de búsqueda en algunos datos según un conjunto de criterios.

Delegados de acción de programación en C #

Puede aprovechar los delegados en C # para implementar eventos y métodos de devolución de llamada. Un delegado en C # es similar a los punteros de función de C ++, pero los delegados de C # son seguros para los tipos. Puede pasar métodos como parámetros a un delegado para permitir que el delegado apunte al método.

El siguiente fragmento de código ilustra la sintaxis para usar Action delegate.

Acción

La siguiente lista de códigos muestra cómo puede usar Action delegate. Este fragmento de código, cuando se ejecuta, imprime la palabra "¡¡¡Hola !!!" en la ventana de la consola.

static void Main (cadena [] argumentos)

        {

            Acción acción = nueva acción (visualización);

            action ("¡¡¡Hola !!!");

            Console.Read ();

        }

Pantalla vacía estática (mensaje de cadena)

        {

            Console.WriteLine (mensaje);

        }

Programación de delegados de Func en C #

Ahora entendamos cómo podemos trabajar con delegados Func en C #. Aquí está la sintaxis de un delegado Func.

Func

El siguiente fragmento de código ilustra cómo puede usar un delegado Func en C #. Imprime el valor de Hra (calculado como el 40% del salario base). El salario base se le pasa como argumento.

static void Main (cadena [] argumentos)

        {

            Func func = new Func (CalculateHra);

            Console.WriteLine (func (50000));

            Console.Read ();

        }

        static double CalculateHra (int básico)

        {

            return (doble) (básico * .4);

        }

Tenga en cuenta que el segundo parámetro en la declaración del delegado Func en el fragmento de código proporcionado anteriormente representa el tipo de retorno del método al que apuntaría el delegado. En este ejemplo, el valor Hra calculado se devuelve como doble.

Programación de delegados de predicado en C #

Un delegado de predicado se utiliza normalmente para buscar elementos en una colección o un conjunto de datos. Aquí está la sintaxis de un delegado de predicado.

Predicado

Tenga en cuenta que Predicate es básicamente equivalente a Func.

Considere la siguiente clase de entidad denominada Cliente.

clase cliente

    {

        public int Id {obtener; conjunto; }

        cadena pública FirstName {get; conjunto; }

        cadena pública LastName {get; conjunto; }

        Dirección de cadena pública {get; conjunto; }

        cadena pública Ciudad {get; conjunto; }

        Estado de cadena pública {get; conjunto; }

        cadena pública País {get; conjunto; }

    }

A continuación, cree una lista de clientes y almacene objetos de tipo Cliente en ella.

 Lista custList = nueva Lista ();

            custList.Add (nuevo cliente {Id = 1, FirstName = "Joydip", LastName = "Kanjilal", State = "Telengana", City = "Hyderabad", Address = "Begumpet", Country = "India"});

            custList.Add (nuevo cliente {Id = 2, FirstName = "Steve", LastName = "Jones", State = "OA", City = "New York", Address = "Lake Avenue", Country = "US"}) ;

La siguiente es la lista de códigos completa que muestra cómo podemos usar un delegado de Predicado para buscar datos.

static void Main(string[] args)

        {

            List custList = new List();

            custList.Add(new Customer { Id = 1, FirstName = "Joydip", LastName = "Kanjilal", State = "Telengana", City = "Hyderabad", Address = "Begumpet", Country = "India" });

            custList.Add(new Customer { Id = 2, FirstName = "Steve", LastName = "Jones", State = "OA", City = "New York", Address = "Lake Avenue", Country = "US" });

            Predicate hydCustomers = x => x.Id == 1;

            Customer customer = custList.Find(hydCustomers);

            Console.WriteLine(customer.FirstName);

            Console.Read();

        }

When the above code snippet is executed, the name “Joydip” will be displayed in the console window.

Cómo hacer más en C #:

  • Cuándo usar una clase abstracta frente a una interfaz en C #
  • Cómo trabajar con AutoMapper en C #
  • Cómo usar expresiones lambda en C #
  • Cómo trabajar con delegados Action, Func y Predicate en C #
  • Cómo trabajar con delegados en C #
  • Cómo implementar un registrador simple en C #
  • Cómo trabajar con atributos en C #
  • Cómo trabajar con log4net en C #
  • Cómo implementar el patrón de diseño del repositorio en C #
  • Cómo trabajar con la reflexión en C #
  • Cómo trabajar con filesystemwatcher en C #
  • Cómo realizar la inicialización diferida en C #
  • Cómo trabajar con MSMQ en C #
  • Cómo trabajar con métodos de extensión en C #
  • Cómo usar expresiones lambda en C #
  • Cuándo usar la palabra clave volátil en C #
  • Cómo usar la palabra clave yield en C #
  • Cómo implementar polimorfismo en C #
  • Cómo construir su propio programador de tareas en C #
  • Cómo trabajar con RabbitMQ en C #
  • Cómo trabajar con una tupla en C #
  • Explorando métodos virtuales y abstractos en C #