Funzioni anonime (Guida per programmatori C#)
Una funzione anonima è un'istruzione o espressione "in linea" che può essere utilizzata con un tipo delegato. È possibile utilizzarla per inizializzare un delegato denominato o passarla come parametro del metodo invece di un tipo delegato denominato.
Sono disponibili due tipi di funzioni anonime, illustrati singolarmente negli argomenti seguenti:
Metodi anonimi (Guida per programmatori C#)
Nota
Le espressioni lambda possono essere associate alle strutture ad albero dell'espressione nonché ai delegati.
L'evoluzione dei delegati in C#
In C# 1.0 l'istanza di un delegato viene creata inizializzandola in modo esplicito con un metodo definito in un altro punto del codice. In C# 2.0 viene introdotto il concetto dei metodi anonimi per scrivere blocchi di istruzioni in linea senza nome che possono essere eseguiti in una chiamata del delegato. In C# 3.0 vengono introdotte le espressioni lambda, che sono concettualmente analoghe ai metodi anonimi ma più esplicite e concise. Queste due funzionalità sono conosciute collettivamente come funzioni anonime. In generale, le applicazioni che sono destinate alla versione 3.5 e alle versioni successive di .NET Framework devono utilizzare le espressioni lambda.
Nell'esempio seguente viene illustrata l'evoluzione della creazione del delegato da C# 1.0 a C# 3.0:
class Test
{
delegate void TestDelegate(string s);
static void M(string s)
{
Console.WriteLine(s);
}
static void Main(string[] args)
{
// Original delegate syntax required
// initialization with a named method.
TestDelegate testDelA = new TestDelegate(M);
// C# 2.0: A delegate can be initialized with
// inline code, called an "anonymous method." This
// method takes a string as an input parameter.
TestDelegate testDelB = delegate(string s) { Console.WriteLine(s); };
// C# 3.0. A delegate can be initialized with
// a lambda expression. The lambda also takes a string
// as an input parameter (x). The type of x is inferred by the compiler.
TestDelegate testDelC = (x) => { Console.WriteLine(x); };
// Invoke the delegates.
testDelA("Hello. My name is M and I write lines.");
testDelB("That's nothing. I'm anonymous and ");
testDelC("I'm a famous author.");
// Keep console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
Hello. My name is M and I write lines.
That's nothing. I'm anonymous and
I'm a famous author.
Press any key to exit.
*/
Specifiche del linguaggio C#
Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.
Vedere anche
Riferimenti
Istruzioni, espressioni e operatori (Guida per programmatori C#)
Delegati (Guida per programmatori C#)