关于c#闭包的问题,求解答!!!!!!!!!!!!!

class Program
    {
        static Action a;
        private static void test()
        {
            int b = 10;
            a = () => Console.WriteLine(b);
            b = 11;       
        }       
        static void Main(string[] args)
        {
          
            test();
            a();
            Console.ReadKey();
        }
    }

这是我写的一个有关闭包的代码
​首先闭包的概念。内层函数引用的外层函数的变量的最终值。
所以最终输出是b改变的值11。因此我想知道闭包的实现原理是什么,据说是调用lambda表达式是产生了匿名类。
类里会有一个属性int b,由构造函数将test()里的b传进去,可是应该传的是10啊····
上网上查了一下,全都是给的IL代码,可我根本看不懂0.0·······
有没有高手给讲解一下原理!!!

C#实现闭包的原理是,共享一个包含内侧lambda表达式变量组的对象。具体你可以看C# in depth第三版。

http://kb.cnblogs.com/page/111231/