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 求解 yolo算法问题
  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝