Partager via


Fonctions anonymes (Guide de programmation C#)

Mise à jour : novembre 2007

Comme décrit ailleurs, un délégué est un type qui encapsule un appel de méthode. Une instance de délégué peut être passée entre les méthodes exactement comme un type, et elle peut être appelée comme une méthode. 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 introduit des expressions lambda, qui sont semblables du point de vue du concept aux méthodes anonymes, mais plus expressif et concis. 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, consultez la section suivante dans Spécifications du langage C#.

  • 5.3.3.29 Fonctions anonymes

Voir aussi

Concepts

Arborescences d'expression

Référence

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

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