小智 5

这些是编译器生成的类来处理闭包.它们不是ASP.NET MVC独有的.

该类将使编译器生成以下类之一:

public class Foo
{
  private bool _bar = true;

  public Func<bool> HelloClosure()
  {
    return () => _bar;
  }
}
Run Code Online (Sandbox Code Playgroud)

当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();
Run Code Online (Sandbox Code Playgroud)

这些自动生成的类管理函数和实例之间的这些依赖关系,这样我们就不会遇到这样的情况.