Compartilhar via


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:

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)

Conceitos

Árvores de expressão (C# e Visual Basic)