VB和VB.NET有什么区别?

use*_*745 22 .net vb.net vb6 programming-languages visual-studio-2008

VB和VB.NET有什么区别?

优选使用示例进行说明.

Tim*_*ter 35

有很多不同之处.

  • VB6和VB.NET的最大变化是运行时环境.VB6使用VB-Runtime而VB.NET使用.Net公共语言运行时(.Net CLR).CLR比VB-Runtime设计和实现得更好.当VB-Runtime解释代码时,CLR通过Just in Time编译器使用更好的代码转换.CLR垃圾收集器也比VB6更有效,因为它也可以检测循环引用.
  • VB6是基于解释器的语言,而VB.NET是一种编译语言
  • VB6不是一种类型安全的语言,而VB.NET是一种类型安全的语言.VB.NET中没有变体类型,VB.NET中没有神奇的类型转换

其他一些差异:

遗产

VB.Net支持继承,允许您定义作为派生类基础的类.派生类继承并可以扩展基类的属性和方法.它们还可以使用基类的新实现覆盖继承的方法.默认情况下,使用VB.Net创建的所有类都是可继承的.因为您设计的表单实际上是类,所以您可以使用继承来基于现有表单定义新表单.有关详细信息,请参见Visual Basic中的继承.

异常处理

VB.Net支持结构化异常处理,使用其他语言(如C++)支持的Try ... Catch ... Finally语法的增强版本.结构化异常处理将现代控制结构(类似于Select Case或While)与异常,受保护的代码块和过滤器相结合.结构化异常处理使得使用健壮,全面的错误处理程序轻松创建和维护程序.有关详细信息,请参阅异常处理简介.

超载

重载是定义具有相同名称但使用不同数据类型的属性,方法,过程或运算符的能力.您可以使用重载过程来提供处理不同类型数据所需的尽可能多的实现,同时提供单个通用过程的外观.有关详细信息,请参阅重载的属性和方法.

覆盖属性和方法

Overrides关键字允许派生对象覆盖从父对象继承的特征.重写的成员具有与从基类继承的成员相同的参数,但它们具有不同的实现.成员的新实现可以通过在成员名称前加上MyBase来调用父类中的原始实现.有关详细信息,请参阅覆盖属性和方法.

构造函数和析构函数

构造函数是控制类的新实例的初始化的过程.相反,析构函数是在类离开作用域或设置为Nothing时释放系统资源的方法.VB.Net使用Sub New和Sub Finalize过程支持构造函数和析构函数.有关详细信息,请参阅对象生存期:如何创建和销毁对象.

数据类型

VB.Net引入了三种新的数据类型.Char数据类型是用于存储Unicode字符的无符号16位数.它等同于.NET Framework System.Char数据类型.Short数据类型是一个带符号的16位整数,在早期版本的Visual Basic中被命名为Integer.Decimal数据类型是一个96位有符号整数,由10的变量幂缩放.在早期版本的Visual Basic中,它仅在Variant中可用.此外,Visual Basic现在支持无符号整数数据类型(UShort,UInteger和ULong),以及签名类型SByte.有关详细信息,请参阅Visual Basic中的数据类型.

接口

接口描述了类的属性和方法,但与类不同,接口不提供实现.使用Interface语句声明接口; 使用Implements语句编写代码,将接口中描述的项目付诸实践.有关详细信息,请参阅Visual Basic中的接口.

代表

委托是可以代表您调用对象方法的对象,有时被描述为类型安全的,面向对象的函数指针.您可以使用委托让过程指定在事件发生时运行的事件处理程序方法.您还可以使用具有多线程应用程序的委托.有关详细信息,请参阅代理和AddressOf运算符.

共享会员

共享成员是由类的所有实例共享的属性,过程和字段.当多个对象需要使用所有对象共有的信息时,共享数据成员非常有用.您可以使用共享类方法,而无需先从类创建对象.有关详细信息,请参阅Visual Basic中的共享成员.参考

您可以使用引用来使用在其他程序集中定义的对象.在VB.Net中,引用指向程序集而不是类型库.有关详细信息,请参见参考和Imports语句.

命名空间

命名空间通过将类,接口和方法组织到层次结构中来防止命名冲突.有关详细信息,请参见Visual Basic中的命名空间.

大会

程序集通过描述特定组件或应用程序的所有必需文件来替换和扩展类型库的功能.程序集可以包含一个或多个名称空间.有关详细信息,请参阅装配.

属性

您可以使用属性来提供有关程序元素的其他信息.例如,您可以使用属性指定在将类用作XML Web服务时应公开类中的哪些方法.有关详细信息,请参阅Visual Basic中的属性.

多线程

您可以使用VB.Net编写可以独立执行多个任务的应用程序.可以阻止其他任务的任务可以在单独的线程上执行,这个过程称为多线程.通过使复杂的任务在与用户界面分离的线程上运行,多线程使您的应用程序对用户输入更具响应性.有关详细信息,请参阅多线程应用程序.

位移算子

VB.Net现在支持对整数数据类型(字节,短整数,长整数和长整数)以及无符号类型(UShort,UInteger和ULong)的算术左移和右移操作.算术移位不是循环的,这意味着在结果的一端移出的位不会在另一端重新引入.还提供了相应的赋值运算符.有关详细信息,请参阅位移操作符和赋值运算符.

循环变量声明

您可以使用VB.Net将循环变量声明为For或For Each循环的一部分.如果在循环外没有声明该名称的变量,则可以在For或For Each语句中包含变量的As子句.以这种方式声明的循环变量的范围是循环本身.有关详细信息,请参阅For ... Next语句(Visual Basic)For Each ... Next语句(Visual Basic).

进一步的信息:

编辑:评论一些像VB6已经支持构造函数的功能(以不同的方式),看看最后一个链接是什么需要更多考虑

  • 第一段中的所有项目符号都是完全错误的:1.在VB6中没有人编译为解释EXE,解释器仅在IDE中用于调试.2. GC并不比引用计数更有效.3. VB6不是基于解释器的语言 - JS中没有`eval`函数.4. VB6**是**类型安全的语言,它只是弱类型(如C)本身并不是一个"弱"点.有一件事是肯定的 - 微软做了很好的妖魔化VB6,吓跑了大部分VB6开发者(数百万),后来将它们陷入.Net.有一件事我也肯定 - 这将再次发生......与.Net. (4认同)
  • +1可获得全面的答案,甚至可以链接到更多信息! (2认同)
  • -1。WQW是正确的,还有其他错误。VB6确实具有接口以及构造函数和析构函数。 (2认同)

Dan*_*zey 16

如果您正在为新项目做出选择,那么相关的要点是:

  • VB6是遗留的(1998年发布,不再支持IDE,并且运行时仅支持Win8的生命周期)
  • VS2008不支持VB6
  • VB.NET是一种现代语言,在VS2008中受支持

我想说VB.NET选择VB.OLD的原因很少(如果有的话!).

如果你"只是感兴趣"那么关于每种语言的维基百科文章都是非常有用的,但简而言之,它们是完全不同的语言,具有表面上相似的语法.VB有自己的运行时,其中VB.NET是使用更现代的.NET Framework的众多语言之一.


Sha*_*air 5

经典VB不支持大多数OOP功能,而VB.NET则支持。