【问题标题】:Is C# 4.0 backward compatible to C# 2.0?C# 4.0 是否向后兼容 C# 2.0?
【发布时间】:2010-05-16 10:19:25
【问题描述】:

我可以知道 C# 4.0 和 C# 2.0 之间有什么区别吗? C# 4.0 是否向后兼容 C# 2.0?

我能说 C# 4.0 是 C# 2.0 的超集吗(就像 C++ 之于 C)?

谢谢。

【问题讨论】:

    标签: c# c#-2.0 c#-4.0


    【解决方案1】:

    C# 4.0 几乎向后兼容以前的版本,但有 a few breaking changes。对于大多数普通代码,您不会注意到这些重大变化。

    对于 C# 4 中的新功能,您可以查看Wikipedia article,其中有很好的示例总结。重点是:

    • 动态成员查找
    • 协变和逆变泛型类型参数
    • 使用 COM 时可选的 ref 关键字
    • 可选参数和命名参数
    • 索引属性

    还请记住,两者之间还有另一个版本 - C# 3.0。这里最重要的新增功能之一是 LINQ 以及为使其成为可能而添加的所有功能。 C# 2.0 和 3.0 的区别远大于 C# 3.0 和 4.0 的区别。


    顺便说一句,正如您在问题中暗示的那样,并非所有有效的 C 代码都是有效的 C++。见here:

    在严格的数学意义上,C 不是 C++ 的子集。有一些程序是有效的 C 但不是有效的 C++,甚至有一些编写代码的方法在 C 和 C++ 中具有不同的含义。

    【讨论】:

      【解决方案2】:

      与以前的版本一样,有一些细微的重大变化。问题是由于协变/逆变,C# 4 引入了一种新类型的有效转换。这意味着以前适用的一些方法现在适用于特定调用。下面是一些对 C# 4 和 C# 2 / 3 都有效的代码:

      using System;
      using System.Collections.Generic;
      
      public class Base
      {
          public void DoSomething(IEnumerable<string> strings)
          {
              Console.WriteLine("Base");
          }
      }
      
      public class Derived : Base
      {
          public void DoSomething(IEnumerable<object> objects)
          {
              Console.WriteLine("Derived");
          }
      }
      
      public class Test
      {
          static void Main()
          {
              Derived d = new Derived();
              d.DoSomething(new List<string>());
          }
      }
      

      在 C# 4 中,这将打印“Derived” - 在 C# 2 和 3 中,它将打印“Base”。

      在 C# 1 和 2 之间也出现了同样的问题,其中委托实例表达式允许非泛型协变和逆变。

      任何新的转换都几乎必然会产生此类问题。然而,根据我的经验,这些事情实际上不太可能导致问题。

      此外,C# 4 以稍微不同的方式处理锁定和类似字段的事件 - 同样,这不会影响大多数代码,但值得了解。 Chris Burrows 在他的博客中有一个 series of articles 来了解他的变化。

      【讨论】:

        【解决方案3】:

        是的,他们曾经这样做过。

        Whats new in C# 4.0

        【讨论】:

          【解决方案4】:

          是的,

          C# 2.0 的所有功能仍在 C# 4.0 中,但是,版本 4 中的新功能显然不在版本 2 中。

          您在 C# 2.0 中编写的所有内容都将在 C# 4.0 中运行。

          但显然相反是行不通的.....

          【讨论】:

          • "您在 C# 2.0 中编写的所有内容都可以在 C# 4.0 中使用。"夸大其词 - 请参阅我的答案以获取重大更改的示例。
          【解决方案5】:

          从 C# 2.0 中添加了许多功能如下:

          所以请查看以上链接以了解新功能..

          【讨论】:

            【解决方案6】:

            但请注意 - 小心被弃用的想法 - 例如 ADO.Net 中的 OracleClient...

            马丁

            编辑 - 是的,Simon 说得有道理……我说的是 .Net。对不起...

            【讨论】:

              猜你喜欢
              • 2021-07-22
              • 1970-01-01
              • 2021-03-02
              • 2011-04-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多