【发布时间】:2008-11-15 07:19:57
【问题描述】:
你们正在寻找或听说在 c# 4.0 中发布的最酷的新功能是什么。
【问题讨论】:
你们正在寻找或听说在 c# 4.0 中发布的最酷的新功能是什么。
【问题讨论】:
动态的东西听起来很酷如果你需要它,但我不希望经常使用它。
委托和接口的通用差异是相似的 - 目前缺乏差异是一个令人头疼的问题,但 C# 4 中可用的有限差异无法涵盖许多令人头疼的地方。
我对 COM 功能并不特别感兴趣 - 我真的应该更多地了解它们是什么。
在构建不可变类型时,可选参数和命名参数可能会产生很大的不同:它支持如下语法:
Person p = new Person (name: "Jon", age: 32);
没有构造函数重载的庞大组合。我更喜欢以只读自动实现的属性的形式编写不可变类型的更多支持,但我不希望我们会得到这些。 (目前它们肯定不在提议的功能列表中。)
我个人实际上对 .NET 4.0 的几个 框架 功能更感兴趣 - 特别是 code contracts 和 parallel extensions。
【讨论】:
方法参数默认值:
public void MyMethod1(string value1 = "test", int num1 = 10, double num2 = 12.2)
{
//...
}
也可能是匿名返回类型:
public var MyMethod2()
{
// ..
}
【讨论】:
【讨论】:
IDynamicObject,dynamic 后面的粘合剂,允许在运行时解释调用。
这对于 REST、XML、COM、DataSet、动态语言和许多其他等固有的无类型场景很有趣。它是在Dynamic Language Runtime (DLR) 之上构建的dynamic dispatch 的实现。
您可以点到声明为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 是工具包中的另一个工具。它不会改变静态与动态的争论,它只是缓解了摩擦。
【讨论】:
增强对Expression Trees的支持!
【讨论】:
严格来说不是 C#,但由于 .NET 被标记,这里有一个关于 BCL changes 的好链接。
自我注意:必须在 4.0 发布之前重命名我的 Stopwatch.Restart() 扩展方法:)
【讨论】:
【讨论】:
dynamic 关键字看起来可以很好地弥合 IronRuby 或 IronPython 等动态语言之间的差距,这可能有助于它在 Microsoft 单一文化中的采用......这让我很兴奋。
虽然我对它很感兴趣,但我也担心它会被过度使用,比如泛型和 LINQ、SQLCLR 等 :)
【讨论】:
C#4.0
1) PLinq
2) 命名参数和可选参数
3) 懒惰
4) 协方差和反方差
5) 任务并行
6) 动态对象
7) 扩展对象
8) 改进的 COM 互操作
9)元组
仅举几例
【讨论】:
使用 async 和 await 以同步方式编写异步代码的能力很酷。
【讨论】: