C#4.0的新酷function

你们正在寻找的最酷的新function是什么,或者你听说过在c#4.0中发布的最新function。

如果你需要动态的东西听起来很酷但我不希望经常使用它。

委托和接口的通用方差是相似的 – 目前缺乏方差是一个令人头痛的问题,但很多地方很难解决C#4中可用的有限差异。

COMfunction对我并不特别感兴趣 – 我真的应该对它们的function有所了解。

构建不可变类型时,可选参数和命名参数可能会产生很大的不同:它启用如下语法:

Person p = new Person (name: "Jon", age: 32); 

没有庞大的构造函数重载组合。 我更喜欢以readonly自动实现的属性的forms编写不可变类型,但我不希望我们会得到那些。 (目前它们肯定不在拟议的function列表中。)

我个人实际上对.NET 4.0的一些框架function更感兴趣 – 特别是代码契约和并行扩展 。

方法参数默认值:

 public void MyMethod1(string value1 = "test", int num1 = 10, double num2 = 12.2) { //... } 

也许匿名返回类型:

 public var MyMethod2() { // .. } 

元组

IDynamicObjectdynamic背后的IDynamicObject ,允许在运行时解释调用。

这对于固有的无类型场景很有意义,例如REST,XML,COM, DataSet ,动态语言等等。 它是在动态语言运行时(DLR)之上构建的动态分派的实现。

您可以使用声明为dynamic变量来代替繁琐的reflection语义。 想象一下使用Silverlight中的Javascript对象:

 dynamic obj = GetScriptObject(); HtmlPage.Window.Alert(obj.someProperty); 

支持所有C#语法(我相信):

 HtmlPage.Window.Alert(obj.someMethod() + obj.items[0]); 

reflection本身看起来更清洁:

 public void WriteSomePropertyValue(object target) { Console.WriteLine((target as dynamic).SomeProperty); } public void WriteSomeMethodValue(object target, int arg1, string arg2) { Console.WriteLine((target as dynamic).SomeMethod(arg1, arg2)); } 

dynamic是工具包中的另一个工具。 它不会改变静态与动态的争论,只是简化了摩擦。

增强了对表达树的支持!

不是严格意义上的C#,但是因为这里标记了.NET,所以关于BCL更改是一个很好的链接。

自我注意:必须在4.0发布之前重命名我的Stopwatch.Restart()扩展方法:)

  • C#2.0 -Generics(添加了.NET Framework支持,C#从中受益); 迭代器模式(yield关键字); 匿名方法(委托关键字),可空类型和空合并运算符(??)。
  • C#3.0 – 匿名类型,扩展方法,对象初始值设定项,集合初始值设定项,隐式类型局部变量(var关键字),lambda表达式(=>)和LINQ查询表达式模式。
  • C#4.0 –可选参数和命名参数,动态类型(动态类型),改进的COM-Interop,以及Contra和Co-Variance。

动态关键字看起来可以很好地弥合IronRuby或IronPython等动态语言之间的差距,这可能有助于它在微软单一文化中的应用…这让我很兴奋。

虽然我对它感兴趣,但我也担心它会被过度使用,比如Generics和LINQ,SQLCLR等:)

C#4.0

1)PLinq

2)命名和可选参数

3)懒惰

4)Co&Contra Variance

5)任务并行

6)动态对象

7)Expando对象

8)改进的COM-Interop

9)元组

仅举几例

能够以异步等待的方式以同步方式编写异步代码很酷。