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

Delegado Action en C#

Action es un tipo de delegado definido en el espacio de nombres System. El tipo de delegado Action es idéntico al tipo de delegado Func, excepto que el delegado Action no devuelve un valor. En otras palabras, se puede usar el delegado Action con métodos que tienen el tipo de retorno void.

¿Qué es el delegado genérico Action?

Action<T> es un delegado genérico integrado en el .NET Framework, que se puede usar el delegado Action<T> para pasar métodos como parámetros, sin necesidad de declarar explícitamente un delegado personalizado. El método encapsulado debe coincidir con la firma del método definido por el delegado. Es decir, el método encapsulado debe tener un parámetro pasado por valor y no puede tener un valor de retorno.

Por ejemplo, el siguiente delegado imprime un 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);
}
Salida:
10

Puede usar el delegado Action en lugar del delegado Print definido anteriormente, por ejemplo:

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

Puede usar la palabra clave new o asignar directamente un método para inicializar el delegado Action:

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

El delegado Action puede aceptar como máximo16parámetros de entrada de diferentes tipos.

Delegado Action y método anónimo

También se puede asignar un método anónimo a un delegado Action, por ejemplo:

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

Delegado Action y expresión Lambda

Las expresiones Lambda también se pueden usar con delegados Action:

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

Por lo tanto, puede usar cualquier método que no utilice el tipo de retorno del delegado Action.

Ejemplo de uso del delegado Action

  • El delegado Action puede tener como máximo 0 parámetros, hasta16un parámetro y sin retorno de valor.

  • Action representa un delegado sin parámetros y sin retorno de valor.

  • Action<int, string> representa un delegado sin retorno de valor con parámetros de entrada int, string.

  • Action<int, string, bool> representa un delegado sin retorno de valor con parámetros de entrada int, string, bool.

  • Action<int, int, int, int> representa que hay parámetros de entrada4Un parámetro de tipo int, sin valor de retorno.

Ventajas de los delegados Action y Func

  1. Definir delegados de manera sencilla y rápida.

  2. Hacer el código más corto.

  3. Tipos compatibles en todo el aplicación.

Puntos a recordar

  1. El delegado Action es idéntico al delegado Func, solo que el delegado Action no devuelve nada. El tipo de retorno debe ser void.

  2. El delegado Action puede tener de 0 a16Un parámetro de entrada.

  3. El delegado Action puede utilizarse junto con métodos anónimos o expresiones lambda.