当前位置:  开发笔记 > 编程语言 > 正文

在C#中,闭包不是不可变的有什么好的理由吗?

如何解决《在C#中,闭包不是不可变的有什么好的理由吗?》经验,为你挑选了1个好方法。

我一直在脑子里反复思考,而且我似乎无法想出为什么C#闭包是可变的.如果您不知道究竟发生了什么,这似乎是一种获得意想不到的后果的好方法.

也许一个知识渊博的人可以阐明为什么C#的设计者会允许状态在闭包中改变?

例:

var foo = "hello";
Action bar = () => Console.WriteLine(foo);
bar();
foo = "goodbye";
bar();

这将为第一个呼叫打印"hello",但外部状态在第二个呼叫时改变,打印"再见".更新了闭包的状态以反映局部变量的更改.



1> yfeldblum..:

C#和JavaScript,以及O'Caml和Haskell以及许多其他语言都有所谓的词法闭包.这意味着内部函数可以访问封闭函数中的局部变量的名称,而不仅仅是值的副本.当然,在具有不可变符号的语言中,例如O'Caml或Haskell,关闭名称与结束值相同,因此两种类型的闭包之间的差异消失了; 尽管如此,这些语言仍然具有词汇封闭,就像C#和JavaScript一样.

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有