你们正在寻找的最酷的新功能是什么,或者你们听说过在c#4.0中发布的最新功能。
答案 0 :(得分:29)
动态的东西听起来很酷如果你需要它但我不希望经常使用它。
委托和接口的通用方差是相似的 - 目前缺乏方差是一个令人头疼的问题,但很多地方很难解决C#4中可用的有限差异。
COM功能对我并不特别感兴趣 - 我真的应该对它们的内容有更多处理。
构建不可变类型时,可选参数和命名参数可能会产生很大的不同:它启用如下语法:
Person p = new Person (name: "Jon", age: 32);
没有庞大的构造函数重载组合。我更喜欢以readonly自动实现的属性的形式编写不可变类型的更多支持,但我不希望我们会得到那些。 (目前它们肯定不在拟议的功能列表中。)
我个人实际上对.NET 4.0的一些框架功能更感兴趣 - 特别是code contracts和parallel extensions。
答案 1 :(得分:17)
方法参数默认值:
public void MyMethod1(string value1 = "test", int num1 = 10, double num2 = 12.2)
{
//...
}
也许是匿名回复类型:
public var MyMethod2()
{
// ..
}
答案 2 :(得分:9)
IDynamicObject
,dynamic
背后的粘合剂,允许在运行时解释调用。
这对于固有的无类型场景很有趣,例如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)
答案 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 和等待很酷。