.NET 4.0中的重大变更

58

关于.NET 4.0中的新特性和类有很多信息,但也有一些变化可能会影响现有的应用程序,例如:

  1. TimeSpan现在实现了IFormattable接口,旧的string.Format()使用无效选项将抛出异常,而不是调用简单的ToString()。然而,CLR团队提供了一个很好的功能来通过配置设置启用以前版本的行为 - TimeSpan_LegacyFormatMode。

    CLR Inside Out

  2. 在声明事件的类内部使用+=或-=访问事件将导致调用生成的访问器的add/remove方法返回void。一些代码甚至在4.0中都不能编译。

    Chris Burrows Blog

  3. CAS已经被弃用,在配置中启用它仍需要使用特殊设置 - NetFx40_LegacySecurityPolicy。

因此,我想知道其他的变化,是否有可能找到至少初步的变化列表,这些变化将或可能破坏现有功能与.NET 4.0的发布?


有一个关于[带有可选参数的虚拟方法解析不直观]的错误已经提交到了Microsoft Connect(https://connect.microsoft.com/VisualStudio/feedback/details/555961/unintuitive-virtual-method-resolution-with-optional-parameters)。 - user333229
5个回答

32

语言文档小组为 C# 和 VB 分别发布了独立的文档,介绍了它们各自的变化:

VB: http://msdn.microsoft.com/en-us/library/cc714070%28VS.100%29.aspx

C#: http://msdn.microsoft.com/en-us/library/ee855831%28VS.100%29.aspx

我编写了 C# 版本,并包括了 Eric Lippert 提到的协变和逆变的变化以及 Chris Burrows 讨论的事件变化。还有一些关于可选参数、嵌入式互操作类型和方法组类型推断的变化。

更新:

另外还有一个非常实用的文档(来自 .NET 文档小组):http://msdn.microsoft.com/en-us/library/ee941656%28VS.100%29.aspx


15

5

还要注意的是,SmtpClient现在实现了IDisposable接口,因此您现在应该使用类似以下方式:

using (var smtpclient = new SmtpClient())
{
  smtpclient.Send(message);
} 

根据这个页面,.NET 4.0框架里可能有更多的“隐藏宝藏”。作者建议在你的代码中使用FxCop来查找它们。

2

0

我刚刚修复了一个生产应用程序中的错误,该应用程序最近转移到了.NET 4.0。

使用嵌套属性的数据绑定会抛出以下异常:

ArgumentException: Cannot bind to the property or column 'SomeProperty' on the DataSource.

这似乎是一个已知问题,有一个解决方法。我在任何官方列表中都找不到它,Microsoft Connect上的错误已被关闭为“无法重现”。

所有嵌套属性都在字符串中定义,因此我必须手动搜索它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接