当然,一般语法存在差异,但还存在哪些其他关键区别?有一些不同,对吧?
14 回答
链接的比较非常彻底,但就主要区别而言,我会注意到以下几点:
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# 区分大小写。
这是一个非常全面的参考。
由于我假设您可以 google,因此我认为您正在寻找的不是指向更多网站的链接。
我的回答:根据你的开发者的历史来选择。C# 更类似于 JAVA,并且可能类似于 C++。VB.NET 对 VB 程序员来说更容易,但我想这不再是一个真正的问题,因为没有来自旧 VB 的新 .NET 程序员。
我的观点是 VB 比 C# 更高效,似乎它在生产力工具(例如 intelisense)方面总是领先,我会向有人问的人推荐 vb 而不是 c#。当然,知道他更喜欢 c# 的人不会问,而 c# 对他来说可能是正确的选择。
尽管 C#3 上的语法糖确实推动了标准的发展,但我必须说 VB.Net 中的一些 Linq to XML 的东西看起来相当不错,并且使得处理复杂的、深度嵌套的 XML 更容易接受。只是一点点。
一个明显的区别是它们如何处理扩展方法(Vb.Net 实际上允许 C# 不允许的东西 - 将扩展方法定义为 ref 的类型传递):http: //blog.gadodia.net/extension-方法-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 仍然没有匿名方法,但现在支持 lambdas。
在我看来,最大的不同是能够用 C# 编写不安全的代码。
虽然 VB.NET 支持 try...catch 类型的异常处理,但它还是有一些类似于 VB6 的 ON ERROR 的东西。ON ERROR 可能会被严重滥用,在绝大多数情况下,try...catch 要好得多;但是在处理 COM 超时操作时,ON ERROR 可能很有用,其中可以捕获、解码错误,并且最后的“重试”是简单的一行。你可以用 try...catch 做同样的事情,但代码更混乱。
该主题在 wikipedia 和 harding 中有简要描述。
http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET http://www.harding.edu/fmccown/vbnet_csharp_comparison.html
只是通过并做你的笔记。
当它到达 IL 时,它只是位。这种不区分大小写只是预编译器通过。但普遍的共识是,vb 更冗长。如果您可以编写 c#,为什么不节省您的眼睛和双手,并编写更少量的代码来做同样的事情。
一个明显的区别是它们如何处理扩展方法(Vb.Net 实际上允许 C# 不允许的东西 - 将扩展方法定义为 ref 的类型传递):http: //blog.gadodia.net/extension-方法-in-vbnet-and-c/
是的,VB.NET 修复了大部分 VB6 问题,并使其成为一种适当的 OOP 语言——即。与 C# 的能力相似。虽然我更喜欢 C#,但我确实发现旧的 VB ON ERROR 构造对于处理 COM 互操作超时很有用。不过要明智地使用一些东西 - ON ERROR 很容易被滥用!