我非常熟悉.NET之前存在的各种形式的VB(VB6,VBA,VBScript ......),但还没有深入研究VB.NET的Sweet Sweet Flavor.
所以如果有人能够快速总结一下VB.NET带来的语言差异,我将非常感激.
假设你说vb你的意思是vb 6.非常大.原始的visual basic不使用.net运行时环境,虽然它们有相似的名称,但它们的语言却差别太大.Visual Basic不是完全面向对象的,但是VB.net是.错误处理在两者之间有很大不同.VB.Net尝试使用catch块,传统的vb使用On Error GOTO语句.这些只是一些差异.这个清单一直在继续.
这是一个描述"Visual Fred"名称的链接.
哦,恐怖.
抱歉,但所有现有答案在某种程度上都是错误的.乔尔实际上是最好的,但其糟糕的措辞鼓励误解(对不起,乔尔 - 但只看你的评论!):
将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++编译器上编译得很好.由于没有完整的VB6代码是有效的VB.NET ,VB和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的名字非常相似(并且出于同样的原因,也就是:营销)但这个完全是误导.有一些句法上的相似之处.除此之外,表面上和引擎盖下,它们是完全不同的语言.
VB.Net只是旨在与.Net框架一起使用的Visual Basic版本.它还对语言进行了其他更改和添加,但VB.Net与VB的对比是不可能的,因为它们是相同的.
您可以做的是与VB.Net对比VBA,VB6,或VBScript,或Visual Basic的其他变体.但VB.Net仍然是 VB的一种可能变体.事实上,如果你自己看一下产品的语言部分,他们现在正在调用VB9的最新版本,VB10将在今年晚些时候推出.
以同样的方式,你不能对比"Pespi"和可乐,因为百事可乐是一种可乐,但你可以对比百事可乐和可乐.
也就是说,VB的VB.Net方言带来了大量的语言变化和改进,包括对面向对象和功能范例的真正支持,以至于惯用的VB.Net代码通常与VB6时代的代码非常不同.