Fonctions anonymes (Guide de programmation C#)Anonymous functions (C# Programming Guide)

Une fonction anonyme est une instruction ou expression « inline » qui peut être utilisée partout où un type délégué est attendu.An anonymous function is an "inline" statement or expression that can be used wherever a delegate type is expected. Vous pouvez l’utiliser pour initialiser un délégué nommé ou la passer à la place d’un type délégué nommé comme paramètre de méthode.You can use it to initialize a named delegate or pass it instead of a named delegate type as a method parameter.

Vous pouvez utiliser une expression lambda ou une méthode anonyme pour créer une fonction anonyme.You can use a lambda expression or an anonymous method to create an anonymous function. Nous vous recommandons d’utiliser des expressions lambda, car elles fournissent un moyen plus concis et plus expressif d’écrire du code en ligne.We recommend using lambda expressions as they provide more concise and expressive way to write inline code. Contrairement aux méthodes anonymes, certains types d’expressions lambda peuvent être convertis en types d’arborescence d’expression.Unlike anonymous methods, some types of lambda expressions can be converted to the expression tree types.

Évolution des délégués en C#The Evolution of Delegates in C#

Dans C# 1.0, vous pouviez créer une instance d’un délégué en l’initialisant explicitement avec une méthode déjà définie à un autre endroit dans le code.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 a introduit le concept des méthodes anonymes, qui vous permettent d’écrire des blocs d’instructions inline sans nom pouvant être exécutés dans un appel de délégué.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 a introduit les expressions lambda, qui sont semblables aux méthodes anonymes d’un point de vue conceptuel, mais qui sont plus expressives et concises.C# 3.0 introduced lambda expressions, which are similar in concept to anonymous methods but more expressive and concise. Ces deux fonctionnalités sont désignées collectivement comme des fonctions anonymes.These two features are known collectively as anonymous functions. En général, les applications qui ciblent la version 3.5 ou une version ultérieure du .NET Framework utilisent des expressions lambda.In general, applications that target version 3.5 and later of the .NET Framework should use lambda expressions.

L’exemple suivant montre l’évolution de la création de délégués entre C# 1.0 et 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.
 */

spécification du langage C#C# language specification

Pour plus d’informations, consultez la section Expressions de fonction anonyme de la spécification du langage C#.For more information, see the Anonymous function expressions section of the C# language specification.

Voir aussiSee also