哦,太恐怖了。
抱歉,所有现有的答案在某种程度上都是错误的。 Joel's 实际上是最好的,但其糟糕的措辞助长了误解(抱歉,Joel - 但看看你的 cmets!):
无法将 VB.Net 与 VB 进行对比,因为它们是同一回事。
这就像说“不可能将苹果与水果进行对比,因为它们是同一种东西”,因此不是很有帮助;尤其是因为许多人(仍然)将“VB”用作“VB6”的同义词。
所以,澄清一下:VB6 和 VB.NET 都是 Visual Basic 语言家族的方言(我们就这么称呼吧)。它们的相似之处充其量只是表面的。实际使用过它们的人(并且不仅查看了一些源代码)会注意到,除了粗略的句法相似性之外,它们是完全不同的野兽。 使用它们是完全不同的体验。
它们实际上彼此相似的唯一方面(除了所说的语法相似性)是它们都非常适合快速应用程序开发(RAD)……至少在您尝试过 Python 或 Ruby 等动态语言之前结合 GUI 敏捷框架,例如 Shoes。但即使是 RAD 环境,也存在巨大差异。
VB6 基本上是为了做 RAD 而开发的,仅此而已。在它那个时代,VB6 是 RAD 中最好的东西,而且在很大程度上。另一方面,VB.NET没有被单独用于 RAD 开发——与 C# 一样。两者都是由通用框架支持的高端语言,很像 Java,但希望改进 Java 的一些缺陷,例如通过削减大量样板代码(引入委托、事件、属性、运算符重载、自动装箱等功能)。
虽然 VB.NET 在很大程度上向后兼容,但这是非常具有误导性的。首先,没有理智的人会说 C 和 C++ 是同一种语言,因为很多 C 程序在 C++ 编译器上编译得很好。从某些指标来看,VB 和 VB.NET 之间的差异甚至更大,因为 no 完整的 VB6 代码是有效的 VB.NET。它需要一个自动化的“升级助手”来生成有效的 .NET 代码,经验表明,即使是中型项目,这个升级助手也不适合,主要是因为它的直译打破了 .NET 世界的许多准则和假设。
像 Kibbee 一样,说 VB6 和 VB.NET 的编译器“基本相同”是完全错误的。同样,声称“.Net 运行时不是对语言的更改”完全没有抓住重点。 当然这是语言的变化。 VB.NET 完全围绕 .NET 框架构建,它不仅仅是任何其他库。
他声称
如果 VB.Net 旨在成为一种新语言,而不仅仅是旧语言的新版本,他们就会摆脱他们没有的“On Error Goto”。
——这同样具有误导性。包含“On Error Goto”只是为了向后兼容(升级助手无法将旧式错误处理转换为基于异常的错误处理)。
让我总结一下这篇相当长的帖子的主要观点,以免迷失:就像 Java 和 JavaScript,VB6 和 VB.NET 有非常相似的名称(也出于同样的原因:营销) 但这完全是误导。有一些句法相似之处。除此之外,无论从表面上还是在底层,它们是完全不同的语言。