Некоторые классы с именем + _closure $ _x отображаются в моих проектах ASP.NET MVC - что это? - PullRequest
0 голосов
/ 15 июня 2009

При добавлении нового строго типизированного представления в ASP.NET MVC появляются следующие странные классы:

alt text

Кто они?

1 Ответ

5 голосов
/ 15 июня 2009

Это сгенерированные компилятором классы, которые обрабатывают замыкания . Они не уникальны для ASP.NET MVC.

Этот класс заставит компилятор сгенерировать один из следующих классов:

public class Foo
{
  private bool _bar = true;

  public Func<bool> HelloClosure()
  {
    return () => _bar;
  }
}

Когда кто-то за пределами Foo вызывает HelloClosure, он возвращает функцию, которая имеет ссылку на этот конкретный экземпляр Foo. Представьте, что мы не выполняем эту функцию немедленно, и GC приходит и собирает Foo. Что происходит, когда мы выполняем функцию?

var fooInstance = new Foo();
var func = fooInstance.HelloClosure();
fooInstance = null;
GC.Collect();
// assuming fooInstance is collected
var result = func.Invoke();

Эти автоматически сгенерированные классы управляют этими зависимостями между функциями и экземплярами, чтобы мы не попали в такую ​​ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...