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

Delegato Action in C#

Action è un tipo di delegato definito nel namespace System. Il tipo di delegato Action è lo stesso del tipo Func, eccetto che il delegato Action non restituisce un valore. In altre parole, il delegato Action può essere utilizzato insieme a metodi con tipo di ritorno void.

Cos'è il delegato generico Action

Action<T> è un delegato generico integrato nel.NET Framework, che può essere utilizzato per passare metodi come parametri del delegato Action<T> senza dover dichiarare esplicitamente un delegato personalizzato. Il metodo encapsulato deve corrispondere alla firma del metodo definito dal delegato. Ciò significa che il metodo encapsulato deve avere un parametro passato a valori e non deve avere un valore di ritorno.

Ad esempio, il seguente delegato stampa un valore 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);
}
Output:
10

Puoi utilizzare il delegato Action per sostituire il delegato Print definito precedentemente, ad esempio:

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

Puoi utilizzare la parola chiave new o assegnare direttamente un metodo per inizializzare il delegato Action:

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

Il delegato Action può accettare fino a 16 parametri di tipo diverso.

Delegato Action e metodo anonimo

Puoi assegnare un metodo anonimo al delegato Action, ad esempio:

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

Delegato Action e espressione lambda

Le espressioni lambda possono essere utilizzate insieme ai delegati Action:

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

Di conseguenza, puoi utilizzare qualsiasi metodo che non utilizzi il valore di ritorno del tipo delegato Action.

Esempio di utilizzo del delegato Action

  • Il delegato Action può accettare da 0 a 16 parametri e non ha valore di ritorno.

  • Action rappresenta un delegato senza parametri e senza valore di ritorno.

  • Action<int, string> rappresenta un delegato senza valore di ritorno con parametri int, string.

  • Action<int, string, bool> rappresenta un delegato senza valore di ritorno con parametri int, string, bool.

  • Action<int, int, int, int> rappresenta un delegato che accetta 4 parametri di tipo int e non restituisce nulla.

Vantaggi dei delegati Action e Func

  1. Definisci facilmente e rapidamente i delegati.

  2. Rendi il codice breve.

  3. Tipi compatibili in tutta l'applicazione.

Punti da ricordare

  1. Il delegato Action è lo stesso del delegato Func, ma il delegato Action non restituisce nulla. Il tipo di ritorno deve essere void.

  2. Il delegato Action può avere da 0 a 16 parametri di input.

  3. Il delegato Action può essere utilizzato con metodi anonimi o espressioni lambda.