Lire en anglais

Partager via


Action<T> Délégué

Définition

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

C#
public delegate void Action<in T>(T obj);
C#
public delegate void Action<T>(T obj);

Paramètres de type

T

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

Ce paramètre de type est contravariant. Cela signifie que vous pouvez utiliser le type spécifié ou tout type moins dérivé. Pour plus d’informations sur la covariance et la contravariance, consultez Covariance et contravariance dans les génériques.

Paramètres

obj
T

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

Exemples

L’exemple suivant illustre l’utilisation du Action<T> délégué pour imprimer le contenu d’un List<T> objet. Dans cet exemple, la Print méthode est utilisée pour afficher le contenu de la liste dans la console. En outre, l’exemple C# montre également l’utilisation de méthodes anonymes pour afficher le contenu dans la console. Notez que l’exemple ne déclare pas explicitement une Action<T> variable. Au lieu de cela, il transmet une référence à une méthode qui prend un paramètre unique et qui ne retourne pas de valeur à la méthode, dont le List<T>.ForEach paramètre unique est un Action<T> délégué. 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 Action<T> signature du délégué attendue par la List<T>.ForEach méthode.

C#
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);
});

void Print(string s)
{
    Console.WriteLine(s);
}

/* This code will produce output similar to the following:
* Bruce
* Alfred
* Tim
* Richard
* Bruce
* Alfred
* Tim
* Richard
*/

Remarques

Vous pouvez utiliser le Action<T> délégué pour 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 lui est passé par valeur et qu’elle ne doit pas retourner une valeur. (En C#, la méthode doit retourner void. En Visual Basic, il doit être défini par la Subconstruction ...End Sub . Il peut également s’agir d’une méthode qui retourne une valeur ignorée.) En règle générale, une telle méthode est utilisée pour effectuer une opération.

Notes

Pour référencer une méthode qui a un paramètre et retourne une valeur, utilisez plutôt le délégué générique Func<T,TResult> .

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

C#
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 explicitement un nouveau délégué et de lui affecter une méthode nommée.

C#
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 délégué avec des Action<T> méthodes anonymes en C#, comme l’illustre l’exemple suivant. (Pour une présentation des méthodes anonymes, consultez Méthodes anonymes.)

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 instance de Action<T> délégué, comme l’illustre l’exemple suivant. (Pour une présentation des expressions lambda, consultez Expressions lambda.)

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);
   }
}

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

Méthodes d’extension

GetMethodInfo(Delegate)

Obtient un objet qui représente la méthode représentée par le délégué spécifié.

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Voir aussi