C# 4.0
C# 4.0的主要主题是动态编程。对象的意义变得越来越“动态”,它们的结构和行为无法通过静态类型来捕获,或者至少编译器在编译程序时无法得知对象的结构和行为。例如——
a. 来自动态编程语言——如Python或Ruby——的对象
b. 通过IDispatch访问的COM对象
c. 通过反射访问的一般.NET类型
d. 结构发生过变化的对象——如HTML DOM对象
尽管C#依然是静态类型语言,但我们的目的是改善它与这些对象的交互。
另一个次要主题是与Visual Basic协同进步(co-evolution)。将来我们希望仅维护每种语言单独的特征,而重要的新特性会同时引入两种语言。它们的区别仅仅是风格和感觉上的,而不在于特性集方面。
C# 4.0中的新特性分为四组——
动态查找
动态查找允许在编写方法、运算符和索引器调用、属性和字段访问甚至对象调用时,绕过C#静态类型检查,而在运行时进行解析。
命名参数和可选参数
现在C#中的参数可以通过在成员声明中为其提供默认值来指名它是可选的。在调用该成员时,可选参数可以忽略。另外,在传入任何参数时都可以按照参数名而不是位置进行传递。
特定于COM的互操作特性
动态查找以及命名参数和可选参数都有助于使针对COM的编程不再像今天这样痛苦。在这些特性之上,我们还添加了大量其他小特性,进一步改善了互操作体验。
变性
过去,IEnumerable<string>并不是IEnumerable<object>。现在它是了——C#包含了类型安全的“协变性和逆变性(co-and contravariance)”而且通用的BCL也将利用这一特性进行更新。