Partager via


Fonctions anonymes (Guide de programmation C#)

Une fonction anonyme est une instruction ou expression "inline" qui peut être utilisée partout où un type délégué est attendu. Vous pouvez l'utiliser pour initialiser un délégué nommé ou la passer à la place d'un type délégué nommé en tant que paramètre de méthode.

Il existe deux types de fonctions anonymes, qui sont décrits dans les rubriques suivantes :

L'évolution de délégués en C#

Dans C# 1.0, vous avez créé une instance d'un délégué en l'initialisant explicitement avec une méthode définie à un autre endroit dans le code. C# 2.0 a introduit le concept de méthodes anonymes comme moyen d'écrire des blocs d'instructions inline sans nom qui peuvent être exécutés dans un appel de délégué. C# 3.0 a introduit des expressions lambda, qui sont semblables du point de vue du concept aux méthodes anonymes, mais plus expressives et concises. Ces deux fonctionnalités sont désignées collectivement comme des fonctions anonymes. En général, les applications qui ciblent la version 3.5 et les versions ultérieures de .NET Framework doivent utiliser des expressions lambda.

L'exemple suivant montre l'évolution de la création de délégué de C# 1.0 à 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#

Pour plus d'informations, voir la Spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.

Voir aussi

Référence

Instructions, expressions et opérateurs (guide de programmation C#)

Expressions lambda (Guide de programmation C#)

Délégués (guide de programmation C#)

Concepts

Arborescences d'expression (C# et Visual Basic)