我可以知道C#4.0和C#2.0之间的区别是什么? C#4.0是否向后兼容C#2.0?
我可以说C#4.0是C#2.0的超集(就像C ++对C一样)吗?
感谢。
答案 0 :(得分:12)
C#4.0 几乎向后兼容以前的版本,但有a few breaking changes。对于大多数普通代码,您不会注意到这些重大变化。
对于C#4中的新功能,您可以查看Wikipedia article,其中包含一些非常好的摘要和示例。关键点是:
还记得中间还有另一个版本 - C#3.0。这里最重要的补充之一是LINQ,并且添加了所有功能以使其成为可能。 C#2.0和3.0之间的差异远大于C#3.0和4.0之间的差异。
顺便说一句,并非所有有效的C代码都是您在问题中隐含的有效C ++。见here:
在严格的数学意义上,C不是C ++的子集。有些程序是有效的C但不是有效的C ++,甚至还有一些编写C和C ++含义不同的代码的方法。
答案 1 :(得分:7)
有一些细微的突破性变化,就像以前的版本一样。问题在于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。
答案 2 :(得分:0)
是的,他们曾经这样做过。
答案 3 :(得分:0)
C#2.0的所有功能仍在C#4.0中,但是版本4中的新功能显然不在版本2中。
您在C#2.0中编写的所有内容都适用于C#4.0。
但显然相反的情况不会起作用.....
答案 4 :(得分:0)
但需要注意的一点是注意 - 请注意不要弃用 - 例如ADO.Net中的OracleClient ......
马丁
编辑 - 是的,西蒙在那里有一点......我真的在谈论.Net。遗憾...
答案 5 :(得分:0)
C#2.0中添加了许多功能如下:
所以请查看以上链接以了解新功能..