小编典典

.NET 中的“闭包”是什么?

all

什么是 闭包 ?我们在 .NET 中有它们吗?

如果它们确实存在于 .NET 中,您能否提供一个代码片段(最好是 C#)来解释它?


阅读 79

收藏
2022-06-25

共1个答案

小编典典

我有一篇关于这个主题的文章。(它有很多例子。)

本质上,闭包是一个可以在以后执行的代码块,但它维护了它最初创建的环境——即它仍然可以使用创建它的方法的局部变量等,即使在那之后方法已完成执行。

闭包的一般特性是在 C# 中通过匿名方法和 lambda 表达式实现的。

这是一个使用匿名方法的示例:

using System;

class Test
{
    static void Main()
    {
        Action action = CreateAction();
        action();
        action();
    }

    static Action CreateAction()
    {
        int counter = 0;
        return delegate
        {
            // Yes, it could be done in one statement; 
            // but it is clearer like this.
            counter++;
            Console.WriteLine("counter={0}", counter);
        };
    }
}

输出:

counter=1
counter=2

在这里我们可以看到 CreateAction 返回的动作仍然可以访问计数器变量,并且确实可以递增它,即使 CreateAction 本身已经完成。

2022-06-25