Anonyme Funktionen (C#-Programmierhandbuch)Anonymous Functions (C# Programming Guide)

Eine anonyme Funktion ist eine „Inline“-Anweisung oder ein „Inline“-Ausdruck, der überall dort verwendet werden kann, wo ein Delegattyp erwartet wird.An anonymous function is an "inline" statement or expression that can be used wherever a delegate type is expected. Sie können sie zum Initialisieren eines benannten Delegaten verwenden oder anstelle eines benannten Delegattypen als Methodenparameter übergeben.You can use it to initialize a named delegate or pass it instead of a named delegate type as a method parameter.

Es gibt zwei Arten von anonymen Funktionen, die in den folgenden Themen einzeln erläutert werden:There are two kinds of anonymous functions, which are discussed individually in the following topics:

Entwicklung von Delegaten in C#The Evolution of Delegates in C#

In C# 1.0 haben Sie eine Instanz eines Delegaten durch explizites Initialisieren mit einer Methode erstellt, die an anderer Stelle im Code definiert wurde.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. C# 2.0 führte das Konzept anonymer Methoden ein, als eine Möglichkeit, unbenannte Inline-Anweisungsblöcke zu schreiben, die in einem Delegataufruf ausgeführt werden können.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. C# 3.0 führte Lambdaausdrücke ein, die anonymen Methoden ähneln, jedoch aussagekräftiger und präziser sind.C# 3.0 introduced lambda expressions, which are similar in concept to anonymous methods but more expressive and concise. Diese beiden Funktionen werden zusammenfassend als anonyme Funktionen bezeichnet.These two features are known collectively as anonymous functions. In der Regel sollten Anwendungen, die für .NET Framework.NET Framework-Version 3.5 und höher gedacht sind, Lambdaausdrücke verwenden.In general, applications that target version 3.5 and later of the .NET Framework.NET Framework should use lambda expressions.

Das folgende Beispiel zeigt die Entwicklung der Delegaterstellung von C# 1.0 zu 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.
 */

C#-ProgrammiersprachenspezifikationC# Language Specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auchSee Also

Anweisungen, Ausdrücke und OperatorenStatements, Expressions, and Operators
Lambda-AusdrückeLambda Expressions
DelegatenDelegates
AusdrucksbaumstrukturenExpression Trees