关于.net:C#4.0的新酷特性

New Cool Features of C# 4.0

你们正在寻找的最酷的新功能是什么,或者你们听说的在C 4.0中发布的功能是什么。


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

委托和接口的一般差异是相似的-目前缺乏差异是一个令人头疼的问题,但许多地方的痛苦将不会被C 4中的有限差异所覆盖。

我对COM的特性并不特别感兴趣——我真的应该对它们有更多的了解。

在构建不可变类型时,可选参数和命名参数可能会有很大的不同:它支持如下语法:

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

没有大量的构造函数重载组合。我更希望对以只读自动实现的属性的形式编写不可变类型有更多的支持,但我不希望我们得到这些支持。(它们目前肯定不在建议的功能列表中。)

我个人更感兴趣的是.NET 4.0的一些框架特性,特别是代码契约和并行扩展。


方法参数默认值:

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

也可能是匿名返回类型:

2


多元组


IDynamicObjectdynamic后面的胶水,允许在运行时解释调用。

这对于固有的非类型化场景(如REST、XML、COM、DataSet、动态语言和许多其他场景)很有趣。它是在动态语言运行时(DLR)之上构建的动态调度的一种实现。

与繁琐的反射语义不同,您可以点入声明为dynamic的变量。想象一下使用Silverlight中的javascript对象:

1
2
3
dynamic obj = GetScriptObject();

HtmlPage.Window.Alert(obj.someProperty);

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

4

反射本身看起来更干净:

1
2
3
4
5
6
7
8
9
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 2.0-泛型(添加了.NET框架支持),C#受益于此);迭代器模式(yield关键字);匿名方法(委托关键字)、可为空的类型和空合并运算符(??)
  • C 3.0-匿名类型、扩展方法、对象初始值设定项,集合初始值设定项,隐式类型化局部变量(var关键字),lambda表达式(=>)和LINQ查询表达式模式。
  • C 4.0-可选参数和命名参数,动态类型(动态类型)、改进的COM互操作和contra和协方差。

不严格地说是C,但由于.NET被标记,这里有一个关于BCL更改的好链接。

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


增强了对表达式树的支持!


C 4

1)PLIQ

2)命名参数和可选参数

3)懒惰

4)协变与抵销

5)任务并行

6)动态对象

7)Expando对象

8)改进了COM互操作

9)元组

只是举几个例子


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

虽然我对它很感兴趣,但我也担心它会被过度使用,如泛型和LINQ、SQLCLR等)。


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