Sono stato reading this article about closures in cui si dice:Cosa c'è di così speciale nelle chiusure?
- "tutto l'impianto idraulico è automatico"
- il compilatore "crea una classe wrapper" e "aumenta la durata delle variabili"
- "si è possibile utilizzare variabili locali senza preoccupazione"
- il compilatore .NET si prende cura del l'impianto idraulico per voi, ecc
Così ho fatto un esempio in base al loro codice e per me, sembra che sebbene le chiusure agiscano in modo simile ai metodi con denominazione regolare che "si prendono cura delle variabili locali senza preoccupazione" e in cui "tutto l'impianto idraulico è automatico".
Oppure quale problema ha risolto questo "involucro di variabili locali" che rende le chiusure così speciali/interessanti/utili?
using System;
namespace TestingLambda2872
{
class Program
{
static void Main(string[] args)
{
Func<int, int> AddToIt = AddToItClosure();
Console.WriteLine("the result is {0}", AddToIt(3)); //returns 30
Console.ReadLine();
}
public static Func<int, int> AddToItClosure()
{
int a = 27;
Func<int, int> func = s => s + a;
return func;
}
}
}
risposta
Quindi la risposta a questo è quello di leggere Jon Skeet's article on closures che Marc ha sottolineato. Questo articolo non mostra solo l'evoluzione che porta alle espressioni lambda in C# ma mostra anche come le chiusure siano trattate in Java, un'ottima lettura per questo argomento.
Altre lingue (ad esempio Javascript) supportano le chiusure. Stai chiedendo il concetto o l'implementazione specifica di C#? – strager
Penso che l'esempio sia troppo semplice per comprendere il potere delle chiusure. –
@strager: intendo il concetto in generale, sto cercando di capire come delegare, chiusure, mappe, lambda, "espressioni lambda", "lambda trees", funzioni anonime, curry, ecc. E in generale il nuovo paradigmi di programmazione funzionale che sembrano estendersi oltre qualsiasi lingua, hanno le loro radici in matematica, ecc. (avevo messo C# nel titolo perché Stackoverflow ora ti dice che il tuo titolo non è abbastanza buono, aggiungi parole univoche ...) –