132 votes

Délégué aux usages de l'action en C #

Je travaillais avec les délégués à l'action en C # dans l'espoir d'en apprendre davantage sur eux et de penser où ils pourraient être utiles.

Quelqu'un a-t-il utilisé le délégué à l'action et, si oui, pourquoi? ou pourriez-vous donner quelques exemples où cela pourrait être utile?

114voto

Andrew Hare Points 159332

Voici un petit exemple qui montre l'utilité de l'Action de délégué

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        Action<String> print = new Action<String>(Program.Print);

        List<String> names = new List<String> { "andrew", "nicole" };

        names.ForEach(print);

        Console.Read();
    }

    static void Print(String s)
    {
        Console.WriteLine(s);
    }
}

Notez que la méthode foreach parcourt la collecte des noms et exécute l' print méthode contre chaque membre de la collection. C'est un peu d'un changement de paradigme pour nous les développeurs C# comme nous diriger vers un style fonctionnel de la programmation. (Pour plus d'info sur l'ordinateur de la science derrière elle lire ceci: http://en.wikipedia.org/wiki/Map_(plus-order_function).

Maintenant, si vous êtes à l'aide de C# 3 vous pouvez slick ce un peu avec une expression lambda comme suit:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<String> names = new List<String> { "andrew", "nicole" };

        names.ForEach(s => Console.WriteLine(s));

        Console.Read();
    }
}

67voto

Programmin Tool Points 2937

Eh bien, une chose que vous pouvez faire est si vous avez un commutateur:

 switch(SomeEnum)
{
  case SomeEnum.One:
      DoThings(someUser);
      break;
  case SomeEnum.Two:
      DoSomethingElse(someUser);
      break;
}
 

Et avec la puissance des actions, vous pouvez transformer ce commutateur en dictionnaire:

 Dictionary<SomeEnum, Action<User>> methodList = 
    new Dictionary<SomeEnum, Action<User>>()

methodList.Add(SomeEnum.One, DoSomething);
methodList.Add(SomeEnum.Two, DoSomethingElse); 
 

...

 methodList[SomeEnum](someUser);
 

Ou vous pourriez prendre cela plus loin:

 SomeOtherMethod(Action<User> someMethodToUse, User someUser)
{
    someMethodToUse(someUser);
}  
 

....

 var neededMethod = methodList[SomeEnum];
SomeOtherMethod(neededMethod, someUser);
 

Juste quelques exemples. Bien sûr, l'utilisation la plus évidente serait les méthodes d'extension Linq.

25voto

arul Points 10719

MSDN dit :

Ce délégué est utilisé par la méthode Array.ForEach et la méthode List.ForEach pour effectuer une action sur chaque élément de la matrice ou de liste.

Sauf que, vous pouvez l’utiliser comme un délégué générique qui prend les paramètres 1 à 3 sans n’importe quelle valeur de retour.

16voto

Aaron Powell Points 15598

Vous pouvez utiliser des actions pour les gestionnaires d'événements courts:

 btnSubmit.Click += (sender, e) => MessageBox.Show("You clicked save!");
 

15voto

Nathan W Points 19990

J’ai utilisé une fois le délégué action comme ça dans un projet :

que tous cela est stocker une action (appel de la méthode) contre un type de contrôle, afin que vous pouvez effacer tous les contrôles sur un formulaire de retour aux défauts d’il.

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