zoukankan      html  css  js  c++  java
  • .net闭包的应用

    这里体现出闭包的数据共享

     1 int[] values = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
     2 
     3 int result1 = 0;
     4 int result2 = 100;
     5 values.ToList().ForEach(s => result1 += s);
     6 values.ToList().ForEach(s => result2 -= s);
     7 
     8 Console.WriteLine(result1);//输出55 表示委托中计算的值是上下文中的数据(正常情况下如果用方法计算赋值给该方法的参数 会在栈中创建新的内存 然后把值复制过去 并不是原来的值)
     9 Console.WriteLine(result2);//输出45 同上 多函数共享上下文环境 方便了数据共享
    10 
    11 Console.ReadKey();

    这里体现出闭包的局部变量升级为成员变量 (在拉姆达表达式生成的匿名类中不会不会随着方法执行完后弹栈 而是随着回调函数彻底执行完后才被回收)

      IList<Action> list = new List<Action>();
                for (int i = 0; i < 5; i++)
                {
                    list.Add(() => Console.WriteLine(i));
                }
    
                list.ToList().ForEach(s => s()); //本该被回收的i变量却还被打印出来了
                Console.ReadKey();
  • 相关阅读:
    Django之DRF框架
    工单系统之用户模块整体实现
    用户模块+jwt实现+注册带token值
    iOS控件之UITableView之滚动
    iOS控件之UITableView
    iOS控件
    iOS 长连接
    MAC PHP Composer
    smartSVN 删除目录/仓库
    smartSVN 分支与合并
  • 原文地址:https://www.cnblogs.com/wzjbk/p/5348604.html
Copyright © 2011-2022 走看看