English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriais Básicos de C#

Tutoriais Avançados de C#

C# Orientado a Objetos (OOP)

Delegado Action em C#

Action é um tipo de delegado definido no espaço de nomes System. O tipo de delegado Action é idêntico ao tipo de delegado Func, exceto que o delegado Action não retorna valor. Em outras palavras, o delegado Action pode ser usado com métodos que têm tipo de retorno void.

O que é o delegado genérico Action

Action<T> é um delegado genérico integrado ao .NET Framework, que pode ser usado para passar métodos como parâmetros usando o delegado Action<T>, sem a necessidade de declarar um delegado personalizado. O método encapsulado deve corresponder ao sinal de chamada do delegado definido. Em outras palavras, o método encapsulado deve ter um parâmetro passado por valor e não pode ter valor de retorno.

Por exemplo, o seguinte delegado imprime um valor int.

public delegate void Print(int val);
static void ConsolePrint(int i)
{
    Console.WriteLine(i);
}
static void Main(string[] args)
{           
    Print prnt = ConsolePrint;
    prnt(10);
}
Saída:
10

Você pode usar o delegado Action em vez do delegado Print definido anteriormente, por exemplo:

static void ConsolePrint(int i)
{
    Console.WriteLine(i);
}
static void Main(string[] args)
{
    Action<int> printActionDel = ConsolePrint;
    printActionDel(10);
}

Você pode usar a palavra-chave new ou atribuir diretamente um método para inicializar o delegado Action:

Action<int> printActionDel = ConsolePrint;
//ou
Action<int> printActionDel = new Action<int>(ConsolePrint);

O delegado Action pode aceitar no máximo16parâmetros de entrada de diferentes tipos.

Delegado Action e Método Anônimo

Você também pode atribuir um método anônimo ao delegado Action, por exemplo:

static void Main(string[] args)
{
    Action<int> printActionDel = delegate(int i)
                                {
                                    Console.WriteLine(i);
                                };
    printActionDel(10);
}
Saída:
10

Delegado Action e Expressão Lambda

A expressão Lambda também pode ser usada com o delegado Action:

static void Main(string[] args)
{
    Action<int> printActionDel = i => Console.WriteLine(i);
       
    printActionDel(10);
}

Portanto, você pode usar qualquer método que não utilize o tipo de valor de retorno do delegado Action.

Exemplo de uso do delegado Action

  • O delegado Action pode aceitar pelo menos 0 parâmetros, até16um parâmetro, sem valor de retorno.

  • Action representa um delegado sem parâmetros de entrada, sem valor de retorno.

  • Action<int, string> representa um delegado com parâmetros de entrada int, string, sem valor de retorno.

  • Action<int, string, bool> representa um delegado com parâmetros de entrada int, string, bool, sem valor de retorno.

  • Action<int, int, int, int> significa que há entrada4um parâmetro do tipo int, sem valor de retorno.

Vantagens dos delegados Action e Func

  1. Definir delegados de forma rápida e fácil.

  2. Fazer o código mais curto.

  3. Tipos compatíveis em todo o aplicativo.

Pontos a lembrar

  1. O delegado Action é o mesmo que o Func delegado, mas o Action delegado não retorna nada. O tipo de retorno deve ser void.

  2. O delegado Action pode ter de 0 a16um parâmetro de entrada.

  3. O delegado Action pode ser usado com métodos anônimos ou expressões lambda.