技术开发 频道

C#与.NET闭包对比示例解析

  看到这里想必你已经明白了,在C#中,原来闭包只是编译器玩的花招而已,它仍然没有脱离.NET对象生命周期的规则,它将需要修改作用域的变量直接封装到返回的类中变成类的一个属性n,从而保证了变量的生命周期不会随函数T1调用结束而结束,因为变量n在这里已经成了返回的类的一个属性了。

  看到这里我想大家应该大体上了解C#闭包的来龙去脉了吧,C#中,闭包其实和类中其他属性、方法是一样的,它们的原则都是下一层可以畅快的调用上一层定义的各种设定,但上一层则不具备访问下一层设定的能力。即类中方法里的变量可以自由访问类中的所有属性和方法,而闭包又可以访问它的上一层即方法中的各种设定。但类不可以访问方法的局部变量,同理,方法也不可以访问其内部定义的匿名函数所定义的局部变量。

  这正是C#中的闭包,它通过超越java语言的委托打下了闭包的第一步基础,随后又通过各种语法糖和编译器来实现如今在.NET世界全面开花的Lamda和LINQ.也使得我们能够编写出更加简洁优雅的代码。

  附:后面是吐槽,与上文无关,大家可以略过,这篇文章其实两年之前在给同事讲C#闭包的时候就有想法整理出来和大家分享了,不过因为生活,工作,或许主要还是自己太懒的原因而拖着没动笔,到今天早上看到园友抱怨国内教书育人的氛围才最终决定利用晚上时间把它整理,然后放出来。我个人认为国内技术圈子的氛围尚可,虽然仍然很多浮躁和易怒在圈子里徘徊。但我们想想国内IT人的生存空间就容易理解了。每天最理想的情况朝9晚6的干活,晚上加班,周末加班这些都是常事,而对我们而言,只要想写出一些经过细细思考的东西都至少需要2个小时以上,而且最好中间不要有人来打扰,这也就注定我们在白天工作时候很难完全有时间静下来组织语言,刨掉这些时间,留给我们自己的生活时间又有多少呢?所以我每次看到有园友发表帖子的时间是晚上1点,2点甚至更晚,都毫不意外,

  我们并非专业写手,也不像国外IT人那样有充足的闲暇时光可以钻研自己的最爱,我们赚着他们的零头,买着比他们本子价格更贵的笔记本,担着比他们更高房价的压力来生活,这样的生活条件下我们这些可爱的社区(不仅限于cnblogs,javaeye,phpchina等)Geek们仍然如此活跃和热情,你还能抱怨什么呢?你要知道你看到的每篇文章(如果是工作人士的话)都是他们晚上从9点写到12点的生活点滴啊。

  所以,以后不要抱怨国内IT氛围吧,相对这个社会其他各行各业的浮躁,我觉得我们的IT圈子已经是很乐于分享的一个群体了。而且除了因为“天下武功,源自欧美,滞后于英语国家”的缘故,我们有些技术确实要晚些才能跟上国外社区的脚步,但对于一些基础知识的解释,已经有很多中文的文章解释得很不错了。像我以前在理解闭包的时候, javaeye上看到的一大堆,像WIKI,像阮一峰的文章,我个人认为对中文用户是足够了。当然,这只是我个人的观点,大家不必较劲。

  最后一点抱怨就是国内大大小小的抄袭网站,我想这也是影响我们中文用户查询资料的一个重要因素吧。以前曾经尝试过在baidu,google上搜索自己的文章,但结果相当令人失望,那些抄袭的网站从来都不在乎内容,因为这些可以通过抄来解决,而且不必带原文链接,不必表明作者。好像东西就是他们自己的一样,他们唯一在乎的就是SEO。这也导致我在使用google搜索的时候时常看到同一篇文章出现在某一页的所有搜索结果中,当然,网址是千奇百怪,实在让人无奈。有些网站即使标明了出处和作者,但用心略有险恶的不是给的链接,而是文字。而且,在这些抄袭者中,最让我感到悲哀的是大名鼎鼎的败毒文库,我至少看到不下5篇败毒文库里的文章是来自JE或者CSDN的,但在文库里面只有个文档,你看不到任何作者提示或者原文链接,也许有人会说,这也可能是作者自己上传的呀,但我个人认为这种可能性太小了,以国内IT人的风格,对败毒即使谈不上厌恶,也很少有主动去巴巴的,试想,一个国内最大的互联网公司都不尊重IT人的劳动(但愿我是错的吧),你又能对其他人说什么呢? 同样看看国外,就我看到的DZone, WindowsPhoneGeek等,每个都是很明确的给出原文的链接,基本上我很少看到有引用别人文章不给原文链接的文章的。而正是这些不尊重作者劳动的网站对国内互联网资料搜索造成大量的垃圾信息。

2
相关文章