C#4.0新特性总述
在介绍C#4.0的新特性之前,先来简单了解一下C#(读音为"C sharp")语言的历史。从2002年C#1.0呱呱坠地,到2010年C#4.0隆重发布,微软在8年时间里完成了4个主要版本的改进和升级,主要变化如下:
❑C#1.0新增托管代码……
❑C#2.0新增泛型支持……
❑C#3.0新增LINQ、Lambda表达式功能……
❑C#4.0新增命名和可选参数、动态语言支持……
图0-1展示了C#语言的发展历程。事实上,C#的发展也离不开.NET Framework的发展,C#4.0依赖于.NET Framework 4的一些新特性,其中DLR(Dynamic Language Runtime,动态语言运行时)是一个信号——一个微软将更加重视动态语言的信号。我们知道,C#是静态类型语言,引入DLR将带来什么好处?本书对此给出了详尽的答案。
图 0-1 C#语言发展路线图
以下是C#4.0的一些新特性。
❑命名和可选参数
在4.0版本之前,如果要调用一个方法,必须传入方法签名规定的参数个数,并且每个参数的类型也要一致。在某些情况下,这样做十分繁琐,比如有时候并不是所有的参数值都需要指定,因此可能需要提供方法的多个重载。这种情况在C#4.0中已经得到很好的改进,我们可以为参数提供默认值,而且可以根据需要忽略其中的某几个参数。
❑协变和逆变
在编程语言中,“协变”是指能够使用比原始指定的派生类型派生程度更大的类型,“逆变”则是指能够使用派生程度更小的类型。在.NET Framework 4和Visual Studio 2010中,C#和Visual Basic都支持在泛型接口和委托中使用协变和逆变,并允许隐式转换泛型类型参数。
❑动态语言运行时
DLR是构建于CLR之上的一系列类库,可以提供对动态语言的支持。.NET CLR的一个核心价值就是支持多语言并允许它们之间互操作。动态语言在近些年已变得日益流行,因此人们希望使用自己喜欢的动态语言,并且在不失去卓越的.NET互操作性的前提下构建应用程序。DLR让这种想法成为现实。
DLR也支持.NET平台上现有的语言。它是静态类型的语言(例如C#),增加了动态的特性。使用C#4.0,可以很方便地支持动态对象,如COM Interop调用、HTML DOM和.NET反射等。
动态语言可以在运行时识别一个对象的类型,然而,在C#等静态类型语言中,必须在设计时就指定对象的类型。
在Visual Studio 2010中,DLR为C#引入了新的dynamic对象,增加了对动态特性的支持,从而允许和动态语言之间的互操作。
❑并行编程
现在,使用C#4.0可以更好地利用多核处理器的处理能力,使用处理器的各个核心进行并行计算,这在视频转换、图像处理等很多领域都非常有用。之前版本的.NET应用在默认情况下都是单线程执行的,因此它们虽然运行于多核的处理器上,但实际上只使用了一个内核。相对于单核处理器来说,虽然多核处理器可以让多个应用具有更快的运行速度,但是却并不一定会让你的应用运行得更快。因此,要充分利用多核处理器,我们需要对旧的应用进行改造,从而可以让它们具有并行处理的能力。
.NET 4通过新增加的“并行运行时”功能来支持并行编程特性,同时在BCL中也增加了一组公共类型和API。API主要包括“任务并行库”(TPL)和“并行LINQ”(PLINQ)两个部分。
❑COM Interop功能增强
以.NET为代表的托管代码世界和以COM(Component Object Model,组件对象模型)等技术为代表的非托管代码世界,它们的编程模型完全不同,为了保持向下兼容,.NET通过引入COM Interop(COM互操作)作为连接两个世界的桥梁。COM Interop可以使得.NET程序在不修改原有COM组件的前提下方便地访问COM组件,这一点非常重要。在C#4.0中,使用COM Interop将更加方便和直观。