C# 和 VB.NET 之间最重要的功能差异是啥?

Posted

技术标签:

【中文标题】C# 和 VB.NET 之间最重要的功能差异是啥?【英文标题】:What are the most important functional differences between C# and VB.NET?C# 和 VB.NET 之间最重要的功能差异是什么? 【发布时间】:2008-08-14 19:59:40 【问题描述】:

当然,一般语法有所不同,但还存在哪些其他关键区别?有一些不同,对吧?

【问题讨论】:

我认为在这个问题上缺乏宗教辩论表明它们有多么相似。 :) 【参考方案1】:

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

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

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

【讨论】:

VB 有匿名函数,只要它们返回一个值。没有匿名方法之类的东西。根据定义,方法是隐式获取对象引用的命名函数。 VB没有C#支持的yield关键字 C# 现在还支持一种后期绑定形式,通过 dynamic 关键字。这仍然与 VB.Net 不同:在 VB 中,您可以通过在项目级别或文件级别打开或关闭“Option Strict”来允许绑定。在 C# 中,后期绑定支持更加明确(在语句级别),通过使用 dynamic 关键字。 VB.Net 现在有 Yield 关键字。另见***.com/questions/97381/yield-in-vb-net 正如其他人指出的那样,VB 也有 Yield 关键字,它是在 VB 11 中添加的。此外,C# 也通过 dynamic 类型支持隐式后期绑定(自 C# 4 起) ;它的行为类似于 VB 中的 Object 类型,其中 Option Strict Off。最后,VS 2015 为 C# 和 VB 启用了相同的重构工具。【参考方案2】:

自从 .Net 2.0 发布以来,这个话题已经有很多时间了。请参阅这篇 Wikipedia 文章以获得可读的摘要。

【讨论】:

【参考方案3】:

这可能被认为是语法,但 VB.NET 区分大小写,而 C# 区分大小写

【讨论】:

哦,这是一项功能。继续,尝试调试一堆代码,其中 intcounter 和 intCounter 是两个不同的变量。两者之间应该没有区别。区分大小写是计算能力昂贵得多的时代遗留下来的(解析“A”“a”比找出它们真的相同更快的行)。【参考方案4】:

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

【讨论】:

【参考方案5】:

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

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

我的观点是 VB 比 C# 更高效,似乎它在生产力工具(例如 intelisense)方面总是领先,我会向提出问题的人推荐 vb 而不是 c#。当然,知道他更喜欢 c# 的人不会问,c# 对他来说可能是正确的选择。

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

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

【讨论】:

太糟糕了,如果尝试在只读上下文中使用这样的扩展方法,则没有警告(编译器复制值并将副本作为ref 参数传递--grr)。 【参考方案8】:

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

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

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

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

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

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

【讨论】:

你完全忘记了 VB 的 XML 支持。 啊,是的,当然。 VB 支持内联 XML - 我仍然不确定混合数据和代码的好处。【参考方案9】:

在我看来,最大的不同是能够用 C# 编写不安全的代码。

【讨论】:

【参考方案10】:

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

【讨论】:

【参考方案11】:

***和harding 简要描述了这个主题。

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

只需仔细阅读并在上面做笔记。

【讨论】:

【参考方案12】:

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

【讨论】:

【参考方案13】:

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

【讨论】:

【参考方案14】:

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

【讨论】:

以上是关于C# 和 VB.NET 之间最重要的功能差异是啥?的主要内容,如果未能解决你的问题,请参考以下文章

用C#编写的asp.net 和 vb.net编写的asp.net 有性能上的差异吗?

计算机问题,VB和C语言最大的区别是啥

VB和C#的区别是啥

C# 应用程序与 C++ 和 VB.Net 中的其他应用程序之间的 IPC

“私有”可见性修饰符 - 将 C# 转换为 VB 时如何处理差异?

在 VB.net 中保存设置的最简单方法是啥