【发布时间】:2008-08-14 19:59:40
【问题描述】:
当然,一般语法有所不同,但还存在哪些其他关键区别?有一些不同,对吧?
【问题讨论】:
-
我认为在这个问题上缺乏宗教辩论表明它们有多么相似。 :)
标签: c# vb.net comparison
当然,一般语法有所不同,但还存在哪些其他关键区别?有一些不同,对吧?
【问题讨论】:
标签: c# vb.net comparison
链接的比较非常彻底,但就主要差异而言,我会注意到以下几点:
总的来说,MS 关注的内容各不相同,因为这两种语言针对的受众非常不同。 This blog post 对目标受众有很好的总结。确定您的受众群体可能是一个好主意,因为这将决定您将从 Microsoft 获得什么样的工具。
【讨论】:
dynamic 关键字。这仍然与 VB.Net 不同:在 VB 中,您可以通过在项目级别或文件级别打开或关闭“Option Strict”来允许绑定。在 C# 中,后期绑定支持更加明确(在语句级别),通过使用 dynamic 关键字。
Yield 关键字。另见stackoverflow.com/questions/97381/yield-in-vb-net
Yield 关键字,它是在 VB 11 中添加的。此外,C# 也通过 dynamic 类型支持隐式后期绑定(自 C# 4 起) ;它的行为类似于 VB 中的 Object 类型,其中 Option Strict Off。最后,VS 2015 为 C# 和 VB 启用了相同的重构工具。
自从 .Net 2.0 发布以来,这个话题已经有很多时间了。请参阅这篇 Wikipedia 文章以获得可读的摘要。
【讨论】:
这可能被认为是语法,但 VB.NET 区分大小写,而 C# 区分大小写 。
【讨论】:
This 是一个非常全面的参考资料。
【讨论】:
由于我假设您可以 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-methods-in-vbnet-and-c/
【讨论】:
ref 参数传递--grr)。
除了语法之外没有那么多了。它们都编译为完全相同的 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。
【讨论】:
在我看来,最大的不同是能够用 C# 编写不安全的代码。
【讨论】:
虽然 VB.NET 支持 try...catch 类型的异常处理,但它还是有类似于 VB6 的 ON ERROR 的东西。 ON ERROR 可能会被严重滥用,在绝大多数情况下,try...catch 要好得多;但是在处理 COM 超时操作时,ON ERROR 可能很有用,其中可以捕获、解码错误,并且最后的“重试”是简单的一行。 你可以用 try...catch 做同样的事情,但代码会更混乱。
【讨论】:
维基百科和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-methods-in-vbnet-and-c/
【讨论】:
是的,VB.NET 修复了大部分 VB6 问题,并使其成为一种合适的 OOP 语言 - 即。与 C# 的能力相似。虽然我更喜欢 C#,但我确实发现旧的 VB ON ERROR 构造对于处理 COM 互操作超时很有用。不过要明智地使用一些东西 - ON ERROR 很容易被滥用!!
【讨论】: