C#4.0的新酷特性

时间:2008-11-15 07:19:58

标签: c# .net c#-4.0

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

10 个答案:

答案 0 :(得分:29)

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

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

COM功能对我并不特别感兴趣 - 我真的应该对它们的内容有更多处理。

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

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

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

我个人实际上对.NET 4.0的一些框架功能更感兴趣 - 特别是code contractsparallel extensions

答案 1 :(得分:17)

方法参数默认值:

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

也许是匿名回复类型:

public var MyMethod2()
{
  // ..
}

答案 2 :(得分:9)

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

这对于固有的无类型场景很有趣,例如REST,XML,COM,DataSet,动态语言等等。它是基于dynamic dispatch构建的Dynamic Language Runtime (DLR)的实现。

而不是繁琐的反射语义,你点入变量声明为dynamic。想象一下使用Silverlight中的Javascript对象:

dynamic obj = GetScriptObject();

HtmlPage.Window.Alert(obj.someProperty);

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

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

反思本身看起来更清洁:

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是工具包中的另一个工具。它不会改变静态与动态的争论,只会简化摩擦。

答案 3 :(得分:9)

答案 4 :(得分:3)

增强了对Expression Trees的支持!

答案 5 :(得分:3)

不是严格意义上的C#,但由于此处标记了.NET,因此这是一个关于BCL changes的良好链接。

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

答案 6 :(得分:3)

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

答案 7 :(得分:2)

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

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

答案 8 :(得分:2)

C#4.0

1)PLinq

2)命名和可选参数

3)懒惰

4)Co&对比差异

5)任务并行

6)动态对象

7)Expando对象

8)改进了COM-Interop

9)元组

仅举几例

答案 9 :(得分:0)

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