C#4.0的新酷特性

ben*_*wey 28 .net c# c#-4.0

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

Jon*_*eet 29

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

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

COM功能对我并不特别感兴趣 - 我真的应该对它们的功能有所了解.

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

Person p = new Person (name: "Jon", age: 32);
Run Code Online (Sandbox Code Playgroud)

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

我个人实际上对.NET 4.0 的一些框架功能更感兴趣- 特别是代码契约并行扩展.

  • 要添加此示例,请参阅:http://marcgravell.blogspot.com/2008/11/immutability-and-optional-parameters.html (3认同)
  • 代码合约+ 1 (3认同)
  • 命名参数也使得布尔参数更加清晰.你想看到'True'或'UseWidget:True'吗? (2认同)

CMS*_*CMS 17

方法参数默认值:

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

也许匿名返回类型:

public var MyMethod2()
{
  // ..
}
Run Code Online (Sandbox Code Playgroud)


Bry*_*tts 9

IDynamicObject,后面的胶水dynamic,允许在运行时解释一个调用.

这对于固有的无类型场景很有意义,例如REST,XML,COM DataSet,动态语言等等.它是在动态语言运行时(DLR)之上构建的动态分派的实现.

相反繁琐反射语义的,你点到声明为变量dynamic.想象一下使用Silverlight中的Javascript对象:

dynamic obj = GetScriptObject();

HtmlPage.Window.Alert(obj.someProperty);
Run Code Online (Sandbox Code Playgroud)

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

HtmlPage.Window.Alert(obj.someMethod() + obj.items[0]);
Run Code Online (Sandbox Code Playgroud)

反思本身看起来更清洁:

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));
}
Run Code Online (Sandbox Code Playgroud)

dynamic是工具包中的另一个工具.它不会改变静态与动态的争论,只是简化了摩擦.

  • 神圣的废话....没想过将物体投射到动态.这样可以让反射更轻松! (4认同)

Ben*_*man 2

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

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

  • 泛型被过度使用?我同意 LINQ 有时被过度使用…… (5认同)