Share via


Funções anônimas (Guia de Programação em C#)

Uma função anônimo é uma instrução “em” ou expressão que pode ser usada em que um tipo delegate é esperada. Você pode usá-la para inicializar um representante nomeado ou para passar em vez de um tipo nomeado delegado como parâmetro do método.

Há dois tipos de funções anônimos, que são discutidas individualmente nos seguintes tópicos:

A evolução de representantes em C#

Em C# 1,0, você criou uma instância de um representante explicitamente inicializando o com um método definido em outro lugar no código. C# 2,0 introduziu o conceito de métodos anônimos como uma maneira de gravar os blocos internos sem nome da instrução que podem ser executados em uma chamada do delegado. C# 3,0 introduziu expressões lambda, que são semelhantes ao conceito de métodos anônimos mas mais completo expressive e concisas. Esses dois recursos são conhecidos coletivamente como funções anônimos. Normalmente, aplicativos destinados a versão 3,5 e posteriores de .NET Framework devem usar expressões lambda.

O exemplo a seguir demonstra a evolução de criação de C# 1,0 a 3,0 C#:

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 a Especificação da linguagem C#. A especificação da linguagem é a fonte definitiva para a sintaxe e o uso de C#.

Consulte também

Referência

Instruções, expressões e operadores (Guia de Programação em C#)

Expressões lambda (Guia de Programação em C#)

Delegados (Guia de Programação em C#)

Conceitos

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