原文地址:https://zhuanlan.zhihu.com/p/3161634 C#的闭包,是一个语法糖. 它实质上是将匿名函数转换成一个类,函数作为其中的类方法,并调整外部调用代码来实现的.既然是对象,自然就有自己的堆内存分配. 但它并不是无脑地每次创建委托就生成一个新的对象,而是做了编译期间优化,实际程序中生成的对象是少于我们的预期的. 下面就是通过反编译来查看C#是如何编译匿名函数的. 首先是这个经典闭包示例,认为结果是0,1,2,3,4,5,6,7,8,9的统统出去抽自己10个耳光,…