前两天,意外地看到了.NET平台为异步编程提供的最新选择:使用Async和Await。这让我感到非常惊喜——因为它大大的简化了异步编程,使得异步编程和同步编程在结构上几乎没有差异。兴奋之余,让我回想了很多.NET和C#这几年来的变化。
大概在08年,我开始接触.NET,更确切的说,是.NET的C#编程语言。坦白地说,我对它的第一印象,就是C#是微软推出的一个类Java语言。但随着对C#和.NET平台的了解和深入,才发现我太小看它了。
微软在02年就发布了.NET Framework的第一个版本,这个版本提供了公共语言运行时和C#语言,其目标就是为下一个十年的应用程序开发者提供语言、框架和快速开发环境。C#作为Java的竞争者,那时候的它还羽翼未丰。但它提供了用户自定义和访问元数据的功能,确实令人称赞。
之后,.NET和C#快速进化。到我接触它的时候,它都已经升级到3.5版本了。但那个时候学校的机房全都装的vs2003,也只能无知的被动的用着1.0那个初级版本。也正因为这个,发生了一些很有趣的事儿.
还清晰的记得,那是在学习C#的第一堂课上,出于好玩,写了一个Windows程序:使用一个后台线程定时去改变一个按钮的位置,这样那个按钮看起来就在满屏幕跳了...郁闷的是,当把那个程序用自己的电脑打开的时候,却不能运行了。抛出的异常内容大致是:一个UI控件只能被它创建的线程访问!
当时,是没有立即明白是什么意思。在百度谷歌几遍后,才大致明白了:Framework2.0以后 ,禁止UI控件被不是创建它的线程访问——因为这可能造成UI控件的不一致性。然后又是几遍百度谷歌,知道怎么处理了。最后得出结论——Framework2.0真是麻烦。但后来发生的一件事儿,让我开始对Framework2.0肃然起敬。
那是在学习ASP.NET的时候了,去图书馆借了一本红皮书,名字忘了,只清楚的记得书皮上有几个大字:ASP.NET之父倾力推荐。里面讲了很多关于C#和ASP.NET的东西,不过现在也都忘了,只记得里面讲的关于泛型的那个章节,让我久久不能忘怀——因为在那之前看《Think in Java》的时候,作者就为当时的Java没有提供一个强类型的列表非常感慨。终于不用在处理集合时,进行转型操作了!那是我第一次觉得C#比Java更优越(当然,现在的Java版本已经提供了泛型的支持)。
另外一个让我偏爱C#而非Java的原因是它们对于事件的实现。C#在语言层方面提供了原生的支持:委托,它已经实现了观察者模式;Java注册一个事件却需要定义事件接口,内部维护监听者列表等几个步骤,相对来说,要麻烦多了。
在09年,先后看了《你必须知道的.NET》和《CLR Via C#》。彼时彼刻,才终于对C#以及.NET平台有了一个大致的了解。知道了中间语言、CLR、装箱拆箱、GC等等好多好多的东西。不由得感叹:.NET平台就是牛逼!并且深信:我已经彻底喜欢上这门语言了。
09年底,参加实习,并在工作中接触了.NET 3.5在语言层提供的最为牛逼的功能:linq和lambda表达式。其实,最初对它的感觉是:Linq这玩意儿不就是通过扩展方法的方式提供了一组操作集合的API嘛。后来才知道这种认识的局限性:通过对linq的扩展,linq可以查询多种数据源,而非仅是内存对象,比如说Linq to xml,Linq to sql,Linq to NHibernate...通过lambda表达式这一直观的方式来操作集合,简直天衣无缝。据说Java 8都准备支持lambda表达式了...而且C#以及.NET的进化之旅还在继续之中...
在12年初的时候,意外中看到了微软推出的ASP.NET MVC。真是不看不知道,一看吓一跳,它被设计得是如此的优雅。以至于几个之前的基于.NET平台的开源MVC项目很快淡出了开发人员的视野。我完全被它折服了,坦白的说,如果要我现在去做一些页面,我一定会选择ASP.NET MVC ,而不是ASP.NET WebForm。它两者面对Http的无状态性的态度完全相反。MVC让视图看起来更加“干净”,而且没有了WebFrom里面那些复杂的控件和页面的生命周期。另外,MVC设计得如此灵活,以至于它可以很好的与IOC容器融合在一起,鼓励我们面向接口编程,写出更容易维护和单元测试的代码...
后来,就到了两天以前...
此刻,已是凌晨1:31,写到此吧,回味学习.NET过程是如此的美妙。但,明天还要上班,不得不停止敲击键盘...