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() { // .. }
元组
IDynamicObject
是dynamic
背后的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)元组
仅举几例
能够以异步和等待的方式以同步方式编写异步代码很酷。