你们正在寻找的最酷的新功能是什么,或者你听说过在c#4.0中发布的最新功能.
如果你需要动态的东西听起来很酷,但我不希望经常使用它.
委托和接口的通用方差是相似的 - 目前缺乏方差是一个令人头痛的问题,但很多地方很难解决C#4中可用的有限差异.
COM功能对我并不特别感兴趣 - 我真的应该对它们的功能有所了解.
构建不可变类型时,可选参数和命名参数可能会产生很大的不同:它启用如下语法:
Person p = new Person (name: "Jon", age: 32);
没有庞大的构造函数重载组合.我更喜欢以readonly自动实现的属性的形式编写不可变类型的更多支持,但我不希望我们会得到那些.(目前他们肯定不在拟议的功能列表中.)
我个人实际上对.NET 4.0 的一些框架功能更感兴趣- 特别是代码契约和并行扩展.
方法参数默认值:
public void MyMethod1(string value1 = "test", int num1 = 10, double num2 = 12.2) { //... }
也许匿名返回类型:
public var MyMethod2() { // .. }
IDynamicObject
,后面的胶水dynamic
,允许在运行时解释一个调用.
这对于固有的无类型场景很有意义,例如REST,XML,COM DataSet
,动态语言等等.它是在动态语言运行时(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
是工具包中的另一个工具.它不会改变静态与动态的争论,只是简化了摩擦.
元组