好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

.NET Framework 4 的一个兼容性问题

.NET Framework 4 的一个兼容性问题

测试程序

我们来看看下面这个非常简单的 C# 程序 Tester.cs:

  1   using   System;
   2  
  3   static   class   Tester
   4   {
   5     static   void   Main()
   6     {
   7      Console.WriteLine( "     CLR:   "  +  Environment.Version);
   8      Console.WriteLine( "  Concat:   "  +  string .Concat( new   int []{ 12 ,  345  }));
   9     }
  10  }

这个测试程序的实质内容只有一行,就是第 8 行,调用了 string 类的静态方法 Concat。

运行结果

我们来看看上述测试程序的运行结果,首先是 Linux 操作系统的 Mono 环境:

ben@vbox:~/work>  gmcs Tester.cs && mono Tester.exe 
   CLR: 2.0.50727.1433
Concat:  System.Int32[] 
ben@vbox:~/work>  dmcs Tester.cs && mono Tester.exe 
   CLR: 4.0.30319.1
Concat:  12345
 

还有 Windows 操作系统的 Microsoft .NET Framework 环境:

D:\work>  C:\Windows\Microsoft.NET\Framework\v2.0.50727\csc.exe Tester.cs 
Microsoft (R) Visual C# 2005 编译器 版本 8.00.50727.4016
用于 Microsoft (R) Windows (R) 2005 Framework 版本 2.0.50727
版权所有(C) Microsoft Corporation 2001-2005。保留所有权利。

D:\work>  Tester.exe 
   CLR: 2.0.50727.4216
Concat:  System.Int32[] 

D:\work>  C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe Tester.cs 
Microsoft(R) Visual C# 2010 编译器 4.0.30319.1 版
版权所有(C) Microsoft Corporation。保留所有权利。

D:\work>  Tester.exe 
   CLR: 4.0.30319.276
Concat:  12345
 

看出来了吧,同一个 C# 程序,不论是 Linux 操作系统还是 Windows 操作系统,在 .NET Framework 2.0 和 .NET Framework 4 之间都表现出了不兼容性。

分析

上述运行结果主要是由于 string 类的静态方法 Concat 在 .NET Framework 2.0 中有 9 种重载的版本,而在 .NET Framework 4 中有 11 种重载的版本。上述测试用的 C# 程序在实际调用的重载版本如下所示:

.NET Framework 2.0: public static string Concat(Object arg0)
.NET Framework 4  : public static string Concat<T>(IEnumerable<T> values)

看来,往 .NET Framework Base Class Library 中增加新的方法也不是安全的,有可能改变原有的 C# 程序的行为。这提醒我们将原有的程序从 .NET Framework 2.0 往 .NET Framework 4 迁移时要多加小心,不光要注意到 MSDN 中明确指出“版本注意事项”的地方,也要注意这种微妙的改变。

参考资料 MSDN: String.Concat 方法 (System) MSDN: String.Concat 方法 (Object) (System) MSDN: String.Concat(T) 方法 (IEnumerable(T)) (System)

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于.NET Framework 4 的一个兼容性问题的详细内容...

  阅读:47次