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

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

What are the most important functional differences between C# and VB.NET?

当然,通用语法有所不同,但是还有哪些其他关键区别呢? 有一些区别吧?


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

  • C#具有匿名方法 VB现在也具有匿名方法
  • C#具有yield关键字(迭代器块) VB11添加了此内容
  • VB支持隐式后期绑定(C#现在通过dynamic关键字具有显式后期绑定)
  • VB支持XML文字
  • VB不区分大小写
  • VB的更多现成代码段
  • 更多用于C#的现成的重构工具 Visual Studio 2015现在为VB和C#提供了相同的重构工具。

通常,MS针对每种事物关注的事物各不相同,因为这两种语言针对的受众非常不同。这篇博客文章对目标受众进行了很好的总结。确定您所在的受众群体可能是一个好主意,因为它将确定您将从Microsoft获得什么样的工具。


自.Net 2.0发布以来,这个主题已经有很多面子了。请参阅此Wikipedia文章以获取可读的摘要。


可以将其视为语法,但是VB.NET不区分大小写,而C#区分大小写。


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


一个明显的区别是它们如何处理扩展方法(Vb.Net实际上允许C#不允许的某些东西-将扩展方法定义为ref的类型传递给它):http://blog.gadodia.net/extension- vbnet和-c中的方法


尽管C#3上的语法糖确实推动了这一标准的发展,但我必须说VB.Net中的Linq to XML东西看起来相当不错,并且使得处理复杂的深层嵌套XML的容忍度更高。一点点。


由于我假设您可以使用google,因此我不认为您正在寻找指向更多网站的链接。

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

我的观点是,VB比C#更具生产力,在生产力工具(例如intelisense)方面,它始终处于领先地位,我会向提出要求的人推荐vb而不是C#。当然,知道他更喜欢c#的人不会问,而c#可能是他的正确选择。


在Wikipedia和Harding上简要描述了此主题。

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

只需仔细做一下就可以了。


尽管VB.NET支持try ... catch类型异常处理,但它仍然具有类似于VB6的ON ERROR的功能。错误可能会被严重滥用,在大多数情况下,try ... catch会更好。但是,在处理COM超时操作时,ON ERROR很有用,在该操作中可以捕获,解码错误,最后的"再试一次"很简单。
您可以使用try ... catch进行相同的操作,但是代码更加混乱。


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


除了语法之外,没有更多的东西了。它们都编译为完全相同的IL,因此您可以将某些内容编译为VB并将其反映到C#中。

最明显的区别是语法糖。例如,VB似乎支持动态类型,但实际上它们和C#一样是静态的-VB编译器可以找出它们。

Visual Studio在VB上的行为不同于在C#上的行为-它隐藏了许多功能,但增加了后台编译(对于小型项目来说是巨大的,对于大型项目来说是很大的资源)和更好的代码片段支持。

随着C#3中越来越多的编译器"神奇",VB.Net确实落后了。 VB现在唯一没有C#的东西就是handles关键字-这值得商bat。

@Tom-确实有用,但有些过时了-VB.Net现在也通过'''支持XML文档

@Luke-VB.Net仍然没有匿名方法,但现在支持lambda。


是的,VB.NET解决了大多数VB6问题,并使其成为一种适当的OOP语言-即。与C#的功能相似。我倾向于使用C#,但我确实发现旧的VB ON ERROR构造对于处理COM互操作超时很有用。明智地使用一些东西-ON ERROR很容易被滥用!


Scott Hanselman最近写了一篇有趣的文章,对比了var和Dim:回到基础:var!= Dim


一个明显的区别是它们如何处理扩展方法(Vb.Net实际上允许C#不允许的某些东西-将扩展方法定义为ref的类型传递给它):http://blog.gadodia.net/extension- vbnet和-c中的方法


当达到IL时,它只是全部位。这种不区分大小写只是预编译器通过。
但普遍的共识是,vb更冗长。
如果您可以编写C#,为什么不省掉眼睛和双手,只写少量的代码来做同样的事情。


推荐阅读