Exporter (0) Imprimer
Développer tout
Développer Réduire
Cet article a fait l'objet d'une traduction automatique. Déplacez votre pointeur sur les phrases de l'article pour voir la version originale de ce texte. Informations supplémentaires.
Traduction
Source

Action<T>, délégué

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

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

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

Paramètres de type

in T

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

Ce paramètre de type est contravariant. Autrement dit, vous pouvez utiliser le type que vous avez 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
Type : T
Paramètre de la méthode encapsulée par ce délégué.

Vous pouvez utiliser le délégué Action<T> 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 de valeur. (En C#, la méthode doit retourner void. En Visual Basic, elle doit être définie par la construction SubEnd Sub. Il peut également s'agir d'une méthode qui retourne une valeur qui est ignorée.) En général, une telle méthode est utilisée pour exécuter une opération.

RemarqueRemarque

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

Lorsque vous utilisez le délégué Action<T>, vous n'avez pas à 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 assigne une référence à la méthode WriteLine ou ShowWindowsMessage à 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 délégué Action<T> plutôt qu'en définissant explicitement un nouveau délégué avant de lui assigner une méthode nommée.


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é Action<T> avec les méthodes anonymes en C#, comme l'illustre l'exemple suivant. (Pour obtenir 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 assigner une expression lambda à une instance de délégué Action<T>, comme l'illustre l'exemple suivant. (Pour obtenir 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);      
   }
}


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

L'exemple suivant illustre l'utilisation du délégué Action<T> pour imprimer le contenu d'un objet List<T>. Dans cet exemple, la méthode Print est utilisée pour afficher le contenu de la liste dans la console. De plus, l'exemple C# montre également comment utiliser les méthodes anonymes pour afficher le contenu dans la console. Notez que l'exemple ne déclare pas explicitement de variable Action<T>. À la place, il passe une référence à une méthode qui prend un paramètre unique et qui ne retourne pas de valeur à la méthode List<T>.ForEach, dont le paramètre unique est délégué Action<T>. De même, dans l'exemple C#, un délégué Action<T> n'est pas instancié explicitement parce que la signature de la méthode anonyme correspond à la signature du délégué Action<T> attendu par la méthode List<T>.ForEach.


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
 */


.NET Framework

Pris en charge dans : 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Pris en charge dans : 4, 3.5 SP1

Bibliothèque de classes portable

Pris en charge dans : Bibliothèque de classes portable

.NET pour les applications du Windows Store

Pris en charge dans : Windows 8

.NET pour les applications Windows Phone

Pris en charge dans : Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (rôle principal du serveur non pris en charge), Windows Server 2008 R2 (rôle principal du serveur pris en charge avec SP1 ou version ultérieure ; Itanium non pris en charge)

Le .NET Framework ne prend pas en charge toutes les versions de chaque plateforme. Pour obtenir la liste des versions prises en charge, consultez Configuration requise du .NET Framework.

Ajouts de la communauté

AJOUTER
Afficher:
© 2014 Microsoft