首页 > 其他分享 >闭包陷阱

闭包陷阱

时间:2022-12-20 14:12:48浏览次数:38  
标签:闭包 Console 陷阱 List WriteLine Action tempClass

闭包对象:如果匿名方法引用了某个局部变量,编译器就会自动将该引用提升到该闭包对象当中。

 

class Program
    {
        static void Main(string[] args)
        {
            List<Action> listAction = new List<Action>();
            for (int i = 0; i < 5; i++)
            {
                Action t = () =>
                {
                    Console.WriteLine(i);
                };
                listAction.Add(t);
            }
            Console.WriteLine();

            foreach (var a in listAction)
            {
                a();
            }
            Console.WriteLine();

            Console.WriteLine("----test02----");
            TempClass tempClass = new TempClass();   // 闭包对象
            List<Action> list01 = new List<Action>();
            for (tempClass.i = 0; tempClass.i < 5; tempClass.i++)
            {
                Action a01 = () => { tempClass.TempFuc(); };
                list01.Add(a01);
            }
            foreach (Action a in list01)
            {
                a();
            }
            Console.WriteLine();

            Console.WriteLine("---去闭包对象---");
            List<Action> list02 = new List<Action>();
            for (int i = 0; i < 5; i++)
            {
                TempClass tempClass01 = new TempClass();
                Console.WriteLine(tempClass01.GetHashCode());
                tempClass01.i = i;
                Action a01 = () => { tempClass01.TempFuc(); };
                list02.Add(a01);
            }

            foreach (Action a in list02)
            {
                a();
            }
        }


    }

    class TempClass
    {
        public int i;
        public void TempFuc()
        {
            Console.WriteLine(i.ToString());
        }
    }

 

标签:闭包,Console,陷阱,List,WriteLine,Action,tempClass
From: https://www.cnblogs.com/wen-chen/p/16994001.html

相关文章

  • 闭包、垃圾回收机制
    一、闭包定义:有权访问另一个函数作用域中变量的函数,就是闭包,创建方法:使用匿名函数返回此变量值。特性:函数内嵌套了一个函数、可以引用外层函数的参数及变量、闭包中的参......
  • 深度剖析 | 【JVM深层系列】[HotSpotVM研究系列] JVM调优的"标准参数"的各种陷阱和坑
    【易错问题】MajorGC和FullGC的区别是什么?触发条件呢?相信大多数人的理解是MajorGC只针对老年代,FullGC会先触发一次MinorGC,不知对否?我参考了R大的分析和介绍,总结了一下......
  • 深度剖析 | 【JVM深层系列】[HotSpotVM研究系列] JVM调优的"标准参数"的各种陷阱和坑
    【易错问题】MajorGC和FullGC的区别是什么?触发条件呢?相信大多数人的理解是MajorGC只针对老年代,FullGC会先触发一次MinorGC,不知对否?我参考了R大的分析和介绍,总结了一......
  • Python 闭包
    闭包概念闭包,又称闭包函数或者闭合函数,其实和前面讲的嵌套函数类似,不同之处在于,闭包中外部函数返回的不是一个具体的值,而是一个函数。一般情况下,返回的函数会赋值给一个变......
  • JS知识点梳理之作用域、作用域链、柯里化、闭包
    一、作用域与作用域链作用域是指js变量使用时所存在的一个区域,分为全局作用域(window)和局部作用域(function、setTimeout...等都会产生局部作用域)。当局部作用域变量名与......
  • 20. 闭包
    函数可以干什么,对象能干什么,函数对象就能干什么当做变量,参数,返回值​函数内部声明变量的时候,一定要使用var命令。如果不用的话,你实际上声明了一个全局变量!匿名......
  • 负环、差分约束和传递闭包
    差分约束https://oi-wiki.org/graph/diff-constraints/定义差分约束系统是一种特殊的\(n\)元一次不等式组,它包含\(n\)个变量\(x_1,...,x_n\)以及\(m\)个约束条......
  • python datetime 时区陷阱
    datetime时区陷阱目录datetime时区陷阱问题答案分析经过(可忽略)情况一:不设置时区情况二:设置时区(以北京时间为例)1)使用datetime函数的tzinfo参数2)时区本地化回归问题......
  • C陷阱与缺陷(二)
    (1)、理解函数声明typedef与函数使用(2)、运算符优先级摘自C语言中文网下表就整理了这些容易出错的情况:这些容易出错的情况,希望读者好好在编译器上调试调试,这样印象会深一......
  • Input 输入框的 防抖和节流 (闭包的应用)
    //防抖点击之后过了wait才响应,如果一直点,就一直没有响应,直到你停下来后,wait后执行。防抖是一进来就清,然后wait后再做exportfunctionantishake<T>(fn:T,wait:number......