cgr939923423 2017-09-01 11:18 采纳率: 33.3%
浏览 785

关于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条回答

  • threenewbee 2017-09-01 15:54
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记