C#和VB.NET之间最重要的功能区别是什么?

时间:2008-08-14 19:59:40

标签: c# vb.net comparison

当然,一般语法有所不同,但存在哪些其他重要区别?有一些的差异,对吧?

15 个答案:

答案 0 :(得分:32)

链接的比较非常彻底,但就主要差异而言,我会注意以下几点:

  • C#有匿名方法 VB现在也有这些
  • C#有yield关键字(迭代器块) VB11添加了这个
  • VB支持implicit late binding(C#现在通过动态关键字显式延迟绑定)
  • VB支持XML文字
  • VB不区分大小写
  • VB的更多开箱即用的代码段
  • C#的更多开箱即用的重构工具 Visual Studio 2015现在为VB和C#提供了相同的重构工具。

一般而言,MS关注的内容各不相同,因为这两种语言针对的是非常不同的受众。 This blog post对目标受众有一个很好的总结。确定您所在的受众群体可能是一个好主意,因为它将决定您从Microsoft获得哪种工具。

答案 1 :(得分:9)

自.Net 2.0发布以来,这个主题已经有了很多时间。有关可读摘要,请参阅此Wikipedia文章。

答案 2 :(得分:5)

这可能被认为是语法,但VB.NET是 敏感的情况,而C#是敏感的

答案 3 :(得分:3)

This是一个非常全面的参考。

答案 4 :(得分:2)

由于我认为你可以谷歌,我不认为你想要的更多网站的链接。

我的回答:根据开发人员的历史记录选择。 C#更像JAVA,可能是C ++之类的。 VB.NET对于VB程序员来说更容易,但我想这不再是一个问题,因为没有新的.NET程序员来自旧VB。

我的观点是VB比C#更有效率,似乎它在生产力工具(例如智能感知)方面总是领先,并且我会向那些要求的人推荐vb over c#。当然,知道他更喜欢c#的人不会问,而c#可能是他的正确选择。

答案 5 :(得分:2)

虽然C#3上的语法糖确实推动了前进,但我必须说VB.Net中的一些Linq to XML内容看起来相当不错,并且使处理复杂,深度嵌套的XML更容易受理。只是一点点。

答案 6 :(得分:2)

一个明显的区别在于它们如何处理扩展方法(Vb.Net实际上允许C#没有的东西 - 传递扩展方法被定义为ref的类型):http://blog.gadodia.net/extension-methods-in-vbnet-and-c/

答案 7 :(得分:1)

虽然VB.NET支持try ... catch类型的异常处理,但它仍然有类似于VB6的ON ERROR。 ON ERROR可以被严重滥用,在绝大多数情况下,尝试......捕获更好;但是当处理COM超时操作时,ON ERROR可能很有用,其中错误可以被捕获,解码,最后“再试一次”是一个简单的行。 你可以尝试使用try ... catch但代码却很麻烦。

答案 8 :(得分:1)

我认为最大的不同是能够用C#编写不安全的代码。

答案 9 :(得分:1)

除了语法不再那么多。它们都编译为完全相同的IL,因此您可以将某些内容编译为VB并将其反映到C#中。

大多数明显的差异是语法糖。例如,VB似乎支持动态类型,但实际上它们和C#一样静态 - VB编译器将它们计算出来。

Visual Studio与VB的行为不同于C# - 它隐藏了许多功能,但增加了后台编译(适用于小型项目,大型资源占用资源)以及更好的代码段支持。

随着越来越多的编译器'魔术'在C#3中,VB.Net真的落后了。 VB现在唯一拥有C#的不是handles关键字 - 这是值得商榷的好处。

@Tom - 非常有用,但有点过时 - VB.Net现在也支持带有'''

的XML文档

@Luke - VB.Net仍然没有anon-methods,但现在支持lambdas。

答案 10 :(得分:1)

在wikipedia和harding上简要介绍了这个主题。

http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

请仔细阅读并做好记录。

答案 11 :(得分:0)

Scott Hanselman最近写了一篇有趣的文章,对比var和Dim:Back to Basics: var != Dim

答案 12 :(得分:0)

当它到达IL时它只是位。不区分大小写只是一个预编译器传递。 但普遍的共识是,vb更加冗长。 如果你能写c#为什么不保存你的眼睛和手,写下少量的代码来做同样的事情。

答案 13 :(得分:0)

一个明显的区别在于它们如何处理扩展方法(Vb.Net实际上允许C#没有的东西 - 传递扩展方法被定义为ref的类型):http://blog.gadodia.net/extension-methods-in-vbnet-and-c/

答案 14 :(得分:0)

是的VB.NET解决了大部分VB6问题并使其成为一种合适的OOP语言 - 即。类似于C#的能力。 AlthougnI倾向于选择C#,我确实发现旧的VB ON ERROR结构对于处理COM互操作超时非常有用。明智地使用的东西 - ON ERROR很容易被滥用!!