C#中闭包的示例分析-创新互联

这篇文章将为大家详细讲解有关C# 中闭包的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

创新互联公司专注于忻府网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供忻府营销型网站建设,忻府网站制作、忻府网页设计、忻府网站官网定制、微信平台小程序开发服务,打造忻府网络公司原创品牌,更为您提供忻府网站排名全网营销落地服务。

C# 中闭包(Closure)详解

这个问题是在最近一次英格兰 Brighton ALT.NET Beers 活动中提出来的。我发现,如果不用代码来演示,你很难单用话语把它解释清楚,所以,在这里,我打算用 C# 来解释一下什么是闭包(closures)。维基百科上说:

在计算机科学中,闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。

所以,一个闭包就是一个“捕获”或“携带”了其被生成的环境中、所属的变量范围内所引用的所有变量的函数。的确,很难描述,但当你看完了这些代码后,你就很容易理解了。

var x = 1;
Action action = () =>
{
 var y = 2;
 var result = x + y;
 Console.Out.WriteLine("result = {0}", result);
};
action();

这里我们首先定义了一个变量“x”,值为1。然后我们定义了一个匿名函数(一个 lambda 表达式)赋给类型 Action。Action 没有参数, 没有返回值,但如果你观察“action”里的定义,你会发现它使用了“x”变量。这是变量是被 action“捕获”或“携带”的,自动被添加到了 action 的运行环境中了。

当我们执行 action 时,它输出了我们预期的结果。请注意,当我们执行时,原始的“x”此时已经脱离了它当初的变量环境,但它仍然能用。

当你在代码调试器(debugger)里观察“action”时,会发现很有趣的事情。我们可以看到,C# 编译器为我们创建了一个 Target 类,里面封装了 x 变量:

C# 中闭包的示例分析

闭包(Closure)

闭包(和 higher order functions)都是非常有用的东西。如果你曾经开发过稍微复杂一点的 JavaScript 程序,你可能就会知道,这个东西可以被当成很多面向对象特征的替代品,就像 C# 那样。前不久我还在 C# 里写了一个例子来验证这种想法。

关于“C# 中闭包的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前标题:C#中闭包的示例分析-创新互联
URL链接:http://scyanting.com/article/dsdjpe.html