1.5 C# 4.0新特性概览
可以说,C# 4.0的新特性的中心在于互操作性。在这方面的最重要的特性就是新的dynamic类型。通过使用dynamic,与COM对象或.NET中动态语言创建的类型之间互操作的繁琐冗长的代码就成为了历史。在互操作性方面,Visual Basic过去领先了C#一段时间。但有了C# 4.0,这样的差距已不复存在。第17章将全章介绍dynamic类型。
每次C#开发团队着手开发一个新特性的时候,他们都必须从一系列特性想法和请求中作出选择。默认方法参数值早就在考虑中了,但在C# 4.0以前从来没有得到实现。而现在,互操作性让这一特性的开发水到渠成。使用默认参数值,与COM类型的互操作将变得更容易。然而,还有另外一个特性与默认参数值相伴而生,那就是命名参数(named argument)。在C# 4.0中,你可以将参数作为命名参数传递给方法,这样参数列表中参数的顺序就是无关紧要的。这听起来就不错,当把它与默认参数值和COM互操作性一起使用的时候,就更加强大了。通常情况下,COM自动化接口含有很多可选参数的方法。使用默认参数,你不必为它们提供全部参数值。使用命名参数,你可以随意在默认参数列表中挑选你想要提供的参数。
C# 4.0中另外一个突出的新特性就是变异(variance)。新增加的上下文关键字支持,使协变及逆变泛型接口和委托的声明成为可能。通过使用in和out关键字来修饰泛型变量,你可以把接口声明为协变或者逆变。这样就允许了从IEnumerable<string>引用到IEnumerable<object>引用这样的直观隐式协变转换。这在C# 4.0之前是不可能的。这种类型的协变一直支持数组,但是,现在这种支持被打破了。第11章有一节详细说明C# 4.0中增加的协变和逆变的复杂细节。