简单的理解:闭包变量是把局部变量的作用域扩展到回调函数,发生在匿名方法注册到委托上,而匿名方法中使用外部的局部变量
说什么都不如图示那么容易明白啊
先看C#的源码
class Program { static void Main(string[] args) { int i = 9; Action act = () => { int j = 8; Console.WriteLine(i + j); }; i = 10; act(); Console.WriteLine(i); } }
基础知识:你必须知道C#在一次编译是会为匿名方法生成一个类,类中只有一个方法,是匿名方法的代码
看看ILdasm下的IL
对比一下普通的局部变量使用和上面的闭包变量使用的区别