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

Metodo anonimo di C#

Come suggerisce il nome, un metodo anonimo non ha nome. Puoi definire un metodo anonimo in C# utilizzando la chiave parole chiave delegate e assegnarlo a una variabile di tipo delegate.

In un metodo anonimo non è necessario specificare il tipo di ritorno, è inferito dalla statement return all'interno del corpo del metodo.

public delegate void Print(int value);
static void Main(string[] args)
{
    Print print = delegate(int val) { 
        Console.WriteLine("Internamente al metodo anonimo. Valore: {0}", val); 
    }
    print(100);
}
Output:
Internamente al metodo anonimo. Valore: 100

Metodo anonimo che accede a variabili definite in una funzione esterna

Un metodo anonimo può accedere a variabili definite in una funzione esterna.

public delegate void Print(int value);
static void Main(string[] args)
{
    int i = 10;
    
    Print prnt = delegate(int val) {
        val += i;
        Console.WriteLine("Metodo anonimo: {0}", val); 
    }
    prnt(100);
}
Output:
Metodo anonimo: 110

Metodo anonimo come parametro

Puoi anche passare un metodo anonimo a un metodo che accetta un delegato come parametro.

Nell'esempio seguente, PrintHelperMethod() utilizza il primo parametro del delegato Print:

public delegate void Print(int value);
class Program
{
    public static void PrintHelperMethod(Print printDel, int val)
    { 
        val += 10;
        printDel(val);
    }
    static void Main(string[] args)
    {
        PrintHelperMethod(delegate(int val) { Console.WriteLine("Metodo anonimo: {0}", val); }, 100);
    }
}
Output:
Metodo anonimo: 110

Un metodo anonimo può essere utilizzato come gestore eventi

saveButton.Click += delegate(Object o, EventArgs e)
{ 
    System.Windows.Forms.MessageBox.Show("Salvataggio completato con successo!"); 
}

C# 3.0 ha introdotto l'espressione lambda, che lavora allo stesso modo dei metodi anonimi.

Limitazioni dei metodi anonimi

  • Non può contenere istruzioni di transizione come goto, break o continue.

  • Non può accedere ai parametri ref o out di un metodo esterno.

  • Non può possedere o accedere a codice non sicuro.

  • Non può essere utilizzato nel lato sinistro dell'operatore is.

 Punti da ricordare

  1. È possibile definire metodi anonimi utilizzando la parola chiave delegate

  2. I metodi anonimi devono essere assegnati a un delegato.

  3. I metodi anonimi possono accedere a variabili o funzioni esterne.

  4. I metodi anonimi possono essere passati come parametri.

  5. I metodi anonimi possono essere utilizzati come gestori di eventi.