Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Action<T> délégué

 

Date de publication : novembre 2016

Encapsule une méthode ayant un seul paramètre et ne retournant aucune valeur.

Pour parcourir le code source de .NET Framework pour ce type, consultez la Reference Source.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public delegate void Action<in T>(
	T obj
)

Paramètres

obj
Type: T

Paramètre de la méthode encapsulée par ce délégué.

Paramètres de type

inT

Type du paramètre de la méthode encapsulée par ce délégué.

System_CAPS_noteRemarque

Pour afficher le code source de .NET Framework pour ce type, consultez la Reference Source. Vous pouvez parcourir le code source en ligne, télécharger la référence de consultation hors connexion et parcourir les sources (y compris les correctifs et mises à jour) pendant le débogage ; see instructions.

Vous pouvez utiliser la Action<T> délégué à passer à une méthode en tant que paramètre sans déclarer explicitement un délégué personnalisé. La méthode encapsulée doit correspondre à la signature de méthode définie par ce délégué. Cela signifie que la méthode encapsulée doit avoir un paramètre qui est passé par valeur, et il ne doit pas retourner une valeur. (En c#, la méthode doit retourner void. En Visual Basic, elle doit être définie par le Sub... End Sub construire. Il peut également être une méthode qui retourne une valeur qui est ignorée.) En règle générale, une telle méthode est utilisée pour effectuer une opération.

System_CAPS_noteRemarque

Pour faire référence à une méthode qui a un paramètre et retourne une valeur, utilisez le type générique Func<T, TResult> déléguer à la place.

Lorsque vous utilisez la Action<T> délégué, vous n’avez pas à définir explicitement un délégué qui encapsule une méthode avec un paramètre unique. Par exemple, le code suivant déclare explicitement un délégué nommé DisplayMessage et assigne une référence à la WriteLine (méthode) ou le ShowWindowsMessage méthode à son instance de délégué.

using System;
using System.Windows.Forms;

delegate void DisplayMessage(string message);

public class TestCustomDelegate
{
   public static void Main()
   {
      DisplayMessage messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

L’exemple suivant simplifie ce code en instanciant le Action<T> délégué au lieu de définir un nouveau délégué et lui assigner une méthode nommée explicitement.

using System;
using System.Windows.Forms;

public class TestAction1
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = ShowWindowsMessage;
      else
         messageTarget = Console.WriteLine;

      messageTarget("Hello, World!");   
   }      

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

Vous pouvez également utiliser le Action<T> délégué avec les méthodes anonymes en c#, comme l’illustre l’exemple suivant. (Pour une introduction aux méthodes anonymes, consultez Méthodes anonymes (Guide de programmation C#).)

using System;
using System.Windows.Forms;

public class TestAnonMethod
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = delegate(string s) { ShowWindowsMessage(s); };
      else
         messageTarget = delegate(string s) { Console.WriteLine(s); };

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

Vous pouvez également affecter une expression lambda à une Action<T> déléguer l’instance, comme l’illustre l’exemple suivant. (Pour une introduction aux expressions lambda, consultez Expressions lambda (Guide de programmation C#).)

using System;
using System.Windows.Forms;

public class TestLambdaExpression
{
   public static void Main()
   {
      Action<string> messageTarget; 

      if (Environment.GetCommandLineArgs().Length > 1)
         messageTarget = s => ShowWindowsMessage(s); 
      else
         messageTarget = s => Console.WriteLine(s);

      messageTarget("Hello, World!");
   }

   private static void ShowWindowsMessage(string message)
   {
      MessageBox.Show(message);      
   }
}

Le ForEach et ForEach<T> chaque acceptent une Action<T> délégué en tant que paramètre. La méthode encapsulée par le délégué permet de vous permet d’effectuer une action sur chaque élément dans la liste ou un tableau. L’exemple utilise le ForEach méthode pour fournir une illustration.

L’exemple suivant illustre l’utilisation de la Action<T> délégué pour imprimer le contenu d’un List<T> objet. Dans cet exemple, le Print méthode est utilisée pour afficher le contenu de la liste dans la console. En outre, l’exemple c# illustre également l’utilisation de méthodes anonymes pour afficher le contenu dans la console. Notez que l’exemple ne déclare pas explicitement un Action<T> variable. Au lieu de cela, il passe une référence à une méthode qui accepte un seul paramètre et qui ne retourne pas une valeur pour le List<T>.ForEach méthode, dont le paramètre unique est un Action<T> déléguer. De même, dans l’exemple c#, un Action<T> délégué n’est pas instancié explicitement, car la signature de la méthode anonyme correspond à la signature de la Action<T> délégué qui est attendue par le List<T>.ForEach (méthode).

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<String> names = new List<String>();
        names.Add("Bruce");
        names.Add("Alfred");
        names.Add("Tim");
        names.Add("Richard");

        // Display the contents of the list using the Print method.
        names.ForEach(Print);

        // The following demonstrates the anonymous method feature of C#
        // to display the contents of the list to the console.
        names.ForEach(delegate(String name)
        {
            Console.WriteLine(name);
        });
    }

    private static void Print(string s)
    {
        Console.WriteLine(s);
    }
}
/* This code will produce output similar to the following:
 * Bruce
 * Alfred
 * Tim
 * Richard
 * Bruce
 * Alfred
 * Tim
 * Richard
 */

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 2.0
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: