J'ai un article sur ce sujet. (Il y a beaucoup d'exemples.)
En essence, une clôture est un bloc de code qui peut être exécuté à une date ultérieure, mais qui maintient l'environnement dans lequel il a été créé à - dire qu'il peut toujours utiliser les variables locales etc de la méthode qui l'a créé, même après que la méthode a fini de s'exécuter.
La caractéristique générale de fermetures est implémenté en C# par les méthodes anonymes et les expressions lambda.
Voici un exemple d'utilisation d'une méthode anonyme:
using System;
class Test
{
static void Main()
{
Action action = CreateAction();
action();
action();
}
static Action CreateAction()
{
int counter = 0;
return delegate
{
// Yes, it could be done in one statement;
// but it is clearer like this.
counter++;
Console.WriteLine("counter={0}", counter);
};
}
}
Ici, nous pouvons voir que l'action retourné par Créeaction a encore accès à la variable compteur, et peut en effet augmenter, même si Créeaction lui-même a fini.