C#4.0是否向后兼容C#2.0?

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

我可以说C#4.0是C#2.0的超集(就像C ++对C一样)吗?

谢谢。

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

对于C#4中的新function,您可以查看维基百科文章 ,其中包含了一些非常好的摘要和示例。 关键点是:

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

还记得中间有另一个版本–C#3.0。 这里最重要的补充之一是LINQ,并且添加了所有function以使其成为可能。 C#2.0和3.0之间的差异远大于C#3.0和4.0之间的差异。


顺便说一句,并非所有有效的C代码都是您在问题中隐含的有效C ++。 看到这里 :

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

正如先前版本中所做的那样,有一些细微的突破性变化。 问题在于C#4由于协方差/逆变而引入了一种新型的有效转换。 这意味着以前适用的某些方法现在适用于特定呼叫。 这里有一些对C#4和C#2/3都有效的代码:

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

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

在C#1和2之间发生了同样的问题,其中委托实例表达式允许非generics协方差和逆变。

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

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

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

什么是C#4.0的新function

是,

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

您在C#2.0中编写的所有内容都适用于C#4.0。

但显然相反的情况不会奏效…..

C#2.0中添加了许多function如下:

  • C#2.0; 随.NET 2.0和VS2005(2005)发布。 主要新function:generics,匿名方法,可空类型,迭代器块
  • C#3.0; 随.NET 3.5和VS2008(2007)发布。 主要新function:lambda表达式,扩展方法,表达式树,匿名类型,隐式类型(var),查询表达式http://weblogs.asp.net/scottgu/archive/2007/03/08/new-c-orcas- language-features-automatic-properties-object-initializers-and-collection-initializers.aspx – http://soumya.wordpress.com/2009/06/12/new-features-in-c-part-ii-c- 3-0 /
  • C#4.0; 随.NET 4.0和VS2010(2010)发布。 主要新function:后期绑定(动态),委托和接口通用差异,更多COM支持,命名参数和可选参数http://coliveira.net/software/new-features-of-c-40 – http:// soumya .wordpress.com / 2009/06/12 /新的function-在-C-部分-III-C-4-0 /

所以请查看上面的链接,了解新function..

但需要注意的是 – 注意思考被弃用 – 例如ADO.Net中的OracleClient ……

马丁

编辑 – 是的,西蒙在那里得到了一点……我真的在谈论.Net。 抱歉…