C # -Закрытие -Очистка

Я изучаю C #. Могу ли я сказать, что закрытие какa construct that can adopt the changes in the environment in which it is defined.

Пример :

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; }); 
}

Переменнаяid объявлен в области FindPersonByID (), но мы все еще можем получить доступ к локальной переменнойid внутри анонимной функции (т.е.)delegate(Person x) { return x.id == id; }

(1) Правильно ли мое понимание закрытия?

(2) Какие преимущества мы можем получить от затворов?

Ответы на вопрос(1)

Ваш ответ на вопрос