Comment travailler avec les délégués Action, Func et Predicate en C #

Un délégué est un pointeur de fonction de type sécurisé qui peut référencer une méthode qui a la même signature que celle du délégué. Les délégués sont utilisés pour définir les méthodes de rappel et implémenter la gestion des événements, et ils sont déclarés à l'aide du mot-clé «delegate». Vous pouvez déclarer un délégué qui peut apparaître seul ou même imbriqué dans une classe.

Que sont les délégués Func et Action? Comment peuvent-ils être utilisés?

La différence fondamentale entre les délégués Func et Action est que si le premier est utilisé pour les délégués qui retournent une valeur, le second peut être utilisé pour les délégués dans lesquels vous n'avez aucune valeur de retour.

Func est un délégué qui pointe vers une méthode qui accepte un ou plusieurs arguments et renvoie une valeur. Action est un délégué qui pointe vers une méthode qui à son tour accepte un ou plusieurs arguments mais ne renvoie aucune valeur. En d'autres termes, vous devez utiliser Action lorsque votre délégué pointe vers une méthode qui renvoie void.

Un prédicat est un délégué qui accepte un ou plusieurs paramètres génériques et renvoie une valeur booléenne - vous pouvez supposer que c'est quelque chose comme Func. Les délégués de prédicat sont généralement utilisés pour effectuer des opérations de recherche sur certaines données en fonction d'un ensemble de critères.

Délégués d'action de programmation en C #

Vous pouvez tirer parti des délégués en C # pour implémenter des événements et rappeler des méthodes. Un délégué en C # est similaire aux pointeurs de fonction de C ++, mais les délégués C # sont de type sécurisé. Vous pouvez transmettre des méthodes en tant que paramètres à un délégué pour permettre au délégué de pointer vers la méthode.

L'extrait de code suivant illustre la syntaxe d'utilisation du délégué d'action.

action

La liste de codes suivante montre comment utiliser le délégué d'action. Cet extrait de code, une fois exécuté, afficherait le mot «Hello !!!» dans la fenêtre de la console.

static void Main (string [] args)

        {

            Action action = nouvelle action (affichage);

            action ("Bonjour !!!");

            Console.Read ();

        }

Affichage statique vide (message sous forme de chaîne)

        {

            Console.WriteLine (message);

        }

Programmation des délégués Func en C #

Voyons maintenant comment nous pouvons travailler avec les délégués Func en C #. Voici la syntaxe d'un délégué Func.

Func

L'extrait de code suivant illustre comment vous pouvez utiliser un délégué Func en C #. Il imprime la valeur de Hra (calculée à 40% du salaire de base). Le salaire de base lui est transmis comme argument.

static void Main (string [] args)

        {

            Func func = nouveau Func (CalculateHra);

            Console.WriteLine (func (50000));

            Console.Read ();

        }

        statique double CalculateHra (int basic)

        {

            return (double) (de base * .4);

        }

Notez que le deuxième paramètre dans la déclaration du délégué Func dans l'extrait de code donné précédemment représente le type de retour de la méthode vers laquelle le délégué pointerait. Dans cet exemple, la valeur Hra calculée est renvoyée comme double.

Programmation des délégués de prédicat en C #

Un délégué Predicate est généralement utilisé pour rechercher des éléments dans une collection ou un ensemble de données. Voici la syntaxe d'un délégué Predicate.

Prédicat

Notez que Predicate est fondamentalement équivalent à Func.

Considérez la classe d'entité suivante nommée Customer.

Client de classe

    {

        public int Id {get; ensemble; }

        chaîne publique FirstName {get; ensemble; }

        chaîne publique LastName {get; ensemble; }

        chaîne publique Address {get; ensemble; }

        chaîne publique City {get; ensemble; }

        chaîne publique State {get; ensemble; }

        chaîne publique Country {get; ensemble; }

    }

Ensuite, créez une liste de clients et stockez-y des objets de type Client.

 Liste custList = nouvelle liste ();

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

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

Voici la liste complète du code qui montre comment utiliser un délégué Predicate pour rechercher des données.

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.

Comment faire plus en C #:

  • Quand utiliser une classe abstraite ou une interface en C #
  • Comment travailler avec AutoMapper en C #
  • Comment utiliser les expressions lambda en C #
  • Comment travailler avec les délégués Action, Func et Predicate en C #
  • Comment travailler avec des délégués en C #
  • Comment implémenter un simple logger en C #
  • Comment travailler avec des attributs en C #
  • Comment travailler avec log4net en C #
  • Comment implémenter le modèle de conception de référentiel en C #
  • Comment travailler avec la réflexion en C #
  • Comment travailler avec Filesystemwatcher en C #
  • Comment effectuer une initialisation différée en C #
  • Comment travailler avec MSMQ en C #
  • Comment travailler avec des méthodes d'extension en C #
  • Comment utiliser les expressions lambda en C #
  • Quand utiliser le mot clé volatile en C #
  • Comment utiliser le mot clé yield en C #
  • Comment implémenter le polymorphisme en C #
  • Comment créer votre propre planificateur de tâches en C #
  • Comment travailler avec RabbitMQ en C #
  • Comment travailler avec un tuple en C #
  • Explorer les méthodes virtuelles et abstraites en C #