JP mi ha consigliato questo articolo, che parla di closures in C# e Java.
Jon Skeet riesce a descrivere le ragioni per le quali le closure sono utili, anche al di fuori del paradigma funzionale dal quale arrivano, con pochi esempi calibrati e chiarificatori.
To put it very simply, closures allow you to encapsulate some behaviour, pass it around like any other object, and still have access to the context in which they were first declared. This allows you to separate out control structures, logical operators etc from the details of how they’re going to be used. The ability to access the original context is what separates closures from normal objects, although closure implementations typically achieve this using normal objects and compiler trickery.
Quindi, le closure, sono funzioni che incapsulano, al momento dell’istanziazione, il contesto delle variabili a cui fanno riferimento.