Expandir Minimizar
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original
Este tópico ainda não foi avaliado como - Avalie este tópico

Delegado Action<T>

Encapsula um método que possui um único parâmetro e não retorna um valor.

Namespace:  System
Assembly:  mscorlib (em mscorlib.dll)
public delegate void Action<in T>(
	T obj
)

Parâmetros de tipo

in T

O tipo do parâmetro do método que encapsula a este delegado.

Este parâmetro de tipo é contravariante. Ou seja, você pode usar o tipo especificado ou qualquer tipo que seja menos derivado. Para obter mais informações sobre covariância e contravariância, consulte Covariância e/contravariância no genéricos.

Parâmetros

obj
Tipo: T
O parâmetro do método que encapsula a este delegado.

Você pode usar o Action<T> representante para passar um método como um parâmetro sem declarar explicitamente um delegado personalizado. O método encapsulado deve corresponder à assinatura do método que é definida por este delegado. Isso significa que o método encapsulado deve ter um parâmetro que é passado para ele por valor, e ele não deve retornar um valor. (Em C#, o método deve retornar void. Em Visual Basic, ele deve ser definido pelo SubEnd Sub construir. Ele também pode ser um método que retorna um valor que será ignorado.) Normalmente, esse método é usado para executar uma operação.

ObservaçãoObservação

Para fazer referência a um método que tem um parâmetro e retorna um valor, use a genérica Func<T, TResult> delegar em vez disso.

Quando você usa o Action<T> representante, você precisa definir explicitamente um delegado que encapsula um método com um único parâmetro. Por exemplo, o código a seguir declara explicitamente um delegado chamado DisplayMessage e atribui uma referência a qualquer um o WriteLine método ou a ShowWindowsMessage método para sua instância do delegado.


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


O exemplo a seguir simplifica esse código pela instanciação de Action<T> delegado em vez de explicitamente definindo um novo delegado e atribuindo um método nomeado para ele.


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


Você também pode usar o Action<T> delegar com métodos anônimos no C#, como ilustra o exemplo a seguir. (Para uma introdução aos métodos anônimos, consulte Métodos anônimos (guia de programação do 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);      
   }
}


Você também pode atribuir uma expressão lambda a uma Action<T> delegar instância, como ilustra o exemplo a seguir. (Para uma introdução a expressões lambda, consulte Expressões lambda (guia de programação do 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);      
   }
}


O ForEach e ForEach<T> os métodos de levar um Action<T> delegar como um parâmetro. O método encapsulado pelo delegado permite que você executar uma ação em cada elemento na matriz ou lista. O exemplo usa a ForEach método para fornecer uma ilustração.

O exemplo a seguir demonstra o uso da Action<T> delegate para imprimir o conteúdo de um List<T> objeto. Neste exemplo, o Print método é usado para exibir o conteúdo da lista para o console. Além disso, o C# exemplo também demonstra o uso de métodos anônimos para exibir o conteúdo para o console. Observe que o exemplo não declarar explicitamente uma Action<T> variável. Em vez disso, ele passa uma referência a um método que usa um único parâmetro e que não retorna um valor para o List<T>.ForEach método, cujo único parâmetro é um Action<T> delegar. Da mesma forma, no C# exemplo, um Action<T> representante explicitamente não é instanciado, porque a assinatura do método anônimo corresponde à assinatura da Action<T> representante esperado pela List<T>.ForEach método.


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

Com suporte em: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Biblioteca de Classes Portátil

Com suporte em: Biblioteca de Classes Portátil

.NET para aplicativos da Windows Store

Com suporte em: Windows 8

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte .Requisitos de sistema do NET Framework.
Isso foi útil para você?
(1500 caracteres restantes)

Contribuições da comunidade

ADICIONAR
A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
© 2013 Microsoft. Todos os direitos reservados.