Funkcje anonimowe (Przewodnik programowania w języku C#)Anonymous functions (C# Programming Guide)

Funkcja anonimowa jest instrukcją "inline" lub wyrażeniem, które może być używane wszędzie tam, gdzie oczekiwany jest typ delegata.An anonymous function is an "inline" statement or expression that can be used wherever a delegate type is expected. Można go użyć do zainicjowania nazwanego delegata lub przekazać go zamiast nazwanego typu delegata jako parametru metody.You can use it to initialize a named delegate or pass it instead of a named delegate type as a method parameter.

Możesz użyć wyrażenia lambda lub metody anonimowej , aby utworzyć funkcję anonimową.You can use a lambda expression or an anonymous method to create an anonymous function. Zalecamy używanie wyrażeń lambda, ponieważ zapewniają one bardziej zwięzły i jednoznaczny sposób pisania kodu śródwierszowego.We recommend using lambda expressions as they provide more concise and expressive way to write inline code. W przeciwieństwie do metod anonimowych niektóre typy wyrażeń lambda można przekonwertować na typy drzewa wyrażenia.Unlike anonymous methods, some types of lambda expressions can be converted to the expression tree types.

Ewolucja delegatów w języku C#The Evolution of Delegates in C#

W języku C# 1,0 utworzono wystąpienie delegata, jawnie inicjując go za pomocą metody, która została zdefiniowana w innym miejscu w kodzie.In C# 1.0, you created an instance of a delegate by explicitly initializing it with a method that was defined elsewhere in the code. W języku C# 2,0 wprowadzono koncepcję metod anonimowych jako sposób pisania nienazwanych bloków instrukcji wbudowanych, które mogą być wykonywane w wywołaniu delegata.C# 2.0 introduced the concept of anonymous methods as a way to write unnamed inline statement blocks that can be executed in a delegate invocation. W języku C# 3,0 wprowadzono wyrażenia lambda, które są podobne w koncepcji metod anonimowych, ale bardziej wyraźne i zwięzłe.C# 3.0 introduced lambda expressions, which are similar in concept to anonymous methods but more expressive and concise. Te dwie funkcje są określane zbiorczo jako funkcje anonimowe.These two features are known collectively as anonymous functions. Ogólnie rzecz biorąc, aplikacje przeznaczone dla .NET Framework 3,5 lub nowszych powinny używać wyrażeń lambda.In general, applications that target .NET Framework 3.5 or later should use lambda expressions.

Poniższy przykład ilustruje ewolucję tworzenia delegatów z C# 1,0 do C# 3,0:The following example demonstrates the evolution of delegate creation from C# 1.0 to 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.
 */

specyfikacja języka C#C# language specification

Aby uzyskać więcej informacji, zobacz sekcję wyrażenia funkcji anonimowej specyfikacji języka C#.For more information, see the Anonymous function expressions section of the C# language specification.

Zobacz takżeSee also