Funções anônimas (guia de programação de C#)
Uma função anônima é "inline" instrução ou expressão que pode ser usado sempre que um tipo delegado seja esperado. Você pode usá-lo para inicializar um delegado nomeado ou passá-lo em vez de um tipo de delegado nomeado como um parâmetro de método.
Há dois tipos de funções anônimas, que são abordados individualmente nos seguintes tópicos:
Anonymous Methods (C# Programming Guide)
Observação As expressões lambda podem ser vinculadas a árvores de expressão e também para representantes.
A evolução dos delegados no C#
C# 1.0, você criou uma instância de um delegado explicitamente Inicializando-lo com um método que foi definido em outro lugar no código. C# 2.0 introduziu o conceito de métodos anônimos como uma maneira de gravar blocos de instrução sem nome in-line que podem ser executados em uma invocação de delegado. C# 3.0 introduziu a expressões lambda, que são semelhantes em conceito para métodos anônimos mas mais expressiva e concisa. Esses dois recursos são conhecidos coletivamente como funções anônimas. Em geral, aplicativos de destino versão 3.5 e posterior da .NET Framework deve usar lambda expressões.
O exemplo a seguir demonstra a evolução da criação de delegado do C# 1.0 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.
*/
Especificação da linguagem C#
Para obter mais informações, consulte C# Language Specification A especificação de linguagem é a fonte definitiva para a sintaxe e o uso de C#.
Consulte também
Referência
Statements, Expressions, and Operators (C# Programming Guide)
Delegates (C# Programming Guide)