当然,一般语法存在差异,但还存在哪些其他关键区别?有 一些 差异,对吗?

有帮助吗?

解决方案

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

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

一般来说,MS 所关注的重点有所不同,因为这两种语言针对的受众截然不同。 这篇博文 对目标受众有很好的总结。确定您属于哪类受众可能是个好主意,因为它将决定您将从 Microsoft 获得哪种工具。

其他提示

自从 .Net 2.0 发布以来,这个话题已经有很多讨论时间了。看到这个 维基百科 文章以获得可读的摘要。

这可能被认为是语法,但 VB.NET 是这样的 C# 区分大小写时敏感 敏感的.

是一本非常全面的参考书。

因为我假设你可以谷歌,所以我不认为你正在寻找更多网站的链接。

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

我的观点是,VB 比 C# 更有生产力,似乎它在生产力工具(例如 intelisense)方面始终领先,而且我会向有需求的人推荐 VB,而不是 C#。当然,知道自己更喜欢 C# 的人不会问,而 C# 可能是他的正确选择。

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

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

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

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

Visual Studio 在 VB 中的行为与在 C# 中的行为不同 - 它隐藏了许多功能,但添加了后台编译(非常适合小型项目,大型项目则占用资源)和更好的代码片段支持。

随着 C#3 中越来越多的编译器“魔法”,VB.Net 确实已经落后了。VB 现在唯一有而 C# 没有的就是 handles 关键字 - 这是有争议的好处。

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

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

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

虽然VB.NET支持try...catch类型的异常处理,但它仍然有类似于VB6的ON ERROR的东西。ON ERROR 可能会被严重滥用,并且在绝大多数情况下,try...catch 要好得多;但是 ON ERROR 在处理 COM 超时操作时非常有用,其中可以捕获、解码错误,并且最终的“重试”只是简单的一行。您可以使用 try...catch 执行相同的操作,但代码要混乱得多。

维基百科和 Harding 对此主题进行了简要描述。

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

只需浏览并做笔记即可。

当到达 IL 时,一切都只是位。不区分大小写只是预编译器的一个过程。但普遍的共识是,vb 更冗长。如果您可以编写 C#,为什么不节省您的眼睛和双手,编写更少的代码来完成同样的事情。

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

斯科特·汉塞尔曼 最近写了一篇有趣的文章来对比 var 和 Dim: 回归本源:var != 暗淡

是的,VB.NET 修复了大部分 VB6 问题,并使其成为一种合适的 OOP 语言 - 即。与 C# 的功能类似。尽管我更喜欢 C#,但我确实发现旧的 VB ON ERROR 构造对于处理 COM 互操作超时很有用。不过,要明智地使用一些东西 - ON ERROR 很容易被滥用!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top