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】:链接的比较非常彻底,但就主要差异而言,我会注意到以下几点:
总的来说,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 有性能上的差异吗?
C# 应用程序与 C++ 和 VB.Net 中的其他应用程序之间的 IPC