C#的闭包

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#的闭包相关的知识,希望对你有一定的参考价值。

简单的理解:闭包变量是把局部变量的作用域扩展到回调函数,发生在匿名方法注册到委托上,而匿名方法中使用外部的局部变量

 

 

说什么都不如图示那么容易明白啊

 

 

先看C#的源码

技术分享
    class Program
    {
        static void Main(string[] args)
        {
            int i = 9;
            Action act = () =>
             {
                 int j = 8;
                 Console.WriteLine(i + j);
             };
            i = 10;
            act();
            Console.WriteLine(i);

        }
    }
View Code

 

基础知识:你必须知道C#在一次编译是会为匿名方法生成一个类,类中只有一个方法,是匿名方法的代码

 

看看ILdasm下的IL

技术分享

 

 

技术分享

 



 

 

对比一下普通的局部变量使用和上面的闭包变量使用的区别

技术分享

 

以上是关于C#的闭包的主要内容,如果未能解决你的问题,请参考以下文章

C#中的闭包和意想不到的坑

C# 最有用的(自定义)代码片段是啥? [关闭]

此 Canon SDK C++ 代码片段的等效 C# 代码是啥?

c#代码片段快速构建代码

C# 闭包有效吗? [复制]

C# 闭包对像