2 cgr939923423 cgr939923423 于 2017.09.01 19:18 提问

关于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·······
有没有高手给讲解一下原理!!!

2个回答

caozhy
caozhy   Ds   Rxr 2017.09.01 23:54

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

qq_38204686
qq_38204686   2017.09.02 18:39
Csdn user default icon
上传中...
上传图片
插入图片