(0) exportieren Drucken
Alle erweitern
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original

Anonyme Funktionen (C#-Programmierhandbuch)

Bei einer anonymen Funktion handelt es sich um eine "Inlineanweisung" bzw. einen Ausdruck, die bzw. der überall dort verwendet werden kann, wo ein Delegattyp erwartet wird. Sie können sie zum Initialisieren eines benannten Delegaten verwenden oder sie anstelle eines benannten Delegattypen als Methodenparameter übergeben.

Es gibt zwei Arten von anonymen Funktionen, die in den folgenden Themen im Einzelnen erläutert werden:

In C# 1.0 wurde eine Instanz eines Delegaten durch explizites Initialisieren mit einer Methode erstellt, die an anderer Stelle im Code definiert war. In C# 2.0 wurde das Konzept anonymer Methoden als Möglichkeit eingeführt, unbenannte Inlineanweisungsblöcke zu schreiben, die in einem Delegataufruf ausgeführt werden können. In C# 3.0 wurden Lambda-Ausdrücke eingeführt, die vom Konzept her anonymen Methoden ähneln, jedoch aussagekräftiger und präziser sind. Diese beiden Funktionen werden allgemein als anonyme Funktionen bezeichnet. Im Allgemeinen sollten Anwendungen, die mit Version 3.5 und höher von .NET Framework arbeiten, Lambda-Ausdrücke verwenden.

Im folgenden Beispiel wird die Entwicklung der Delegaterstellung von C# 1.0 bis C# 3.0 veranschaulicht:


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.
 */


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

Community-Beiträge

HINZUFÜGEN
Microsoft führt eine Onlineumfrage durch, um Ihre Meinung zur MSDN-Website zu erfahren. Wenn Sie sich zur Teilnahme entscheiden, wird Ihnen die Onlineumfrage angezeigt, sobald Sie die MSDN-Website verlassen.

Möchten Sie an der Umfrage teilnehmen?
Anzeigen:
© 2014 Microsoft