3 votes

Utilisation des délégués Types et méthodes

Je constate une utilisation croissante des types de délégués proposés dans l'espace de nom System ( Action<T> ; Predicate<T> etc). Comme il s'agit de délégués, je crois comprendre qu'ils doivent être utilisés là où nous avons traditionnellement utilisé des délégués dans le passé (appels asynchrones, démarrage de threads, gestion d'événements, etc.) S'agit-il d'une simple préférence ou est-il considéré comme une pratique d'utiliser ces types de délégués dans des scénarios tels que ceux présentés ci-dessous, plutôt que d'utiliser des appels à des méthodes que nous avons déclarées (ou des méthodes anonymes) :

public void MyMethod()
{
      Action<string> action = delegate(string userName
      {
            try
            {
               XmlDocument profile = DataHelper.GetProfile(userName);
               UpdateMember(profile);
            }
            catch (Exception exception)
            {
               if (_log.IsErrorEnabled) _log.ErrorFormat(exception.Message);
               throw (exception);
            }
      };

      GetUsers().ForEach(action);
}

Au début, je trouvais le code moins intuitif à suivre que l'utilisation de méthodes déclarées ou anonymes. Je commence à coder de cette façon, et je me demande quelle est la vue à cet égard. L'exemple ci-dessus est tout dans une méthode. Est-ce une surutilisation des délégués ?

4voto

Jon Skeet Points 692016

Pour un simple foreach boucle, je préférerais la construction en langage normal - voir ce billet de blog pour le point de vue d'Eric Lippert . Je pense que l'utilisation d'un délégué ici est quelque peu gratuite.

Dans d'autres cas - notamment avec LINQ - cela a beaucoup de sens.

Les délégués sont un bon moyen de permettre la spécialisation sans avoir à déclarer et implémenter une interface ou à dériver d'un type afin de surcharger les méthodes... mais avec modération, bien sûr. Si vous avez plusieurs méthodes à implémenter (et que vous voulez vraiment spécifier le comportement de chacune d'entre elles), une interface est plus logique. Si vous créez véritablement un objet spécialisé de type type alors la dérivation et la substitution ont un sens. Si vous voulez un modèle de stratégie, cependant, les délégués fonctionnent très bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X