I am learning C#.Can I mean closure as a construct that can adopt the changes in the environment in which it is defined.
Example :
List<Person> gurus =
new List<Person>()
{
new Person{id=1,Name="Jon Skeet"},
new Person{id=2,Name="Marc Gravell"},
new Person{id=3,Name="Lasse"}
};
void FindPersonByID(int id)
{
gurus.FindAll(delegate(Person x) { return x.id == id; });
}
The variable id is declared in the scope of FindPersonByID() but t we still can access
the local variable id inside the anonymous function (i.e) delegate(Person x) { return x.id == id; }
(1) Is my understanding of closure is correct ?
(2) What are the advantages can we get from closures?
Yes the code inside of
FindPersonByIDis taking advantage of a closure by using the parameteridwithin the lambda expression. Strictly speaking the definitions of closures are a bit more complex but at a basic level this is correct. If you want more information on how they function I encourage you to read the following articlesThe primary advantage of closures is essentially what you demonstrated above. It allows you to write the code in a more natural, straight forward fashion without having to worry about the implementation details of how the lambda expression is generated (generally)
Consider for example how much code you would have to write in the abscence of closures
All of this just to express the concept of using a parameter inside of a delegate.