从VB6到VB.NET的变化综述(转)

从VB6到VB.NET的变化综述

当创建ASP.NET页面时,需要使用一种与兼容 .NET的编程语言,如C#、VB.NET或JScript.NET。但是从VB6/VBScript 到VB.NET有许多重要的变化,这正是本文所涉及的内容。

另外,如果想获得更多有关的信息,我强烈推荐你阅读Microsoft的文章:为Visual Basic 6.0应用程序升级到Visual Basic.NET做好准备。

引言
随着Microsoft .NET平台的发布,Visual Basic开始成为一种完全面向对象的语言,简称为VB.NET。虽然有了一些根本性的变化,开发者从VB6到VB.NET的学习热情依然相当高,即使对于有经验的编程人员也是如此。本文中,我将列出Visual Basic语言中的变化,并在适当的地方举例说明。这里所列出的可能不完全,但是已经包括了大部分的功能。如果你是一个想要转到VB.NET上去的 VB程序员,这篇文章就一定要读一读。

ASP.NET Beta 1版本可以从http://www.asp.net/免费下载。本文中所讨论的一些变化是属于 Beta 2版本的,这些 Beta 2中的新内容在ASP.NET的Beta 1 版本中是无效的,文中都作了注明。

数据类型的改变
.NET平台为所有支持语言提供了公共类型系统,这就意味着所有语言都必须支持支持公共语言运行时间环境所强制的相同的数据类型,如此就消除了不同语言之间数据类型的不兼容性。例如,在一个32位的Windows平台上,在C++这类语言中,integer数据类型占据4个字节,而在 VB 中则占据2个字节。以下是VB.NET中与数据类型有关的变化:

在 .NET下,VB.NET 中的Integer数据类型也是4个字节。
VB.NET没有currency 数据类型,作为代替,它提供了decimal。
VB.NET 引入了一种新的数据类型,叫做Char。 Char数据类型占据2个字节,可以存储Unicode 字符。
VB.NET 没有Variant数据类型。为了得到与variant类型相同的结果,你可以使用Object数据类型。因为在.NET中的一切,包括原始数据类型,都是一个对象,一个object类型的变量,它可以指向任何数据类型。
在VB.NET中没有固定长度字符串的概念。
在VB6中,我们使用Type关键字来声明用户自定义结构。VB.NET引入了与此目的相同的结构关键字,语法的其它部分是相同的:
Structure MyStruct1
  ...
End Structure

变量声明
现在看看一个简单的VB6例子:

Dim x,y as integer  

在这个例子中,VB6 将 x看成variant,把y 看成integer。VB.NET改进了这个解释,它将x 和y都创建成integer。另外,VB.NET 还允许你在声明语句中为变量赋初始值,如下:

Dim str1 as string="hello"  

VB.NET 还引入了Read-Only (只读)变量。只读变量不像常数,声明它的时候不用初始化,但是一旦你给它赋值,就不能再修改。请看下面的例子:

'未初始化
Dim readonly x as integer
'附值
x=100
'不能再被修改,因此下面的语句将出错
x=200

数组
使用 VB6时,你可以通过编程来定义数组的上限和下限。而在VB.NET中,数组的下限总是0,定义数组时是这样的:

Dim aStates(50) as String  

这样实际创建的元素是 51 个,其中 0是下限,50是上限。注意:在VB.NET Beta 1中,以上语句会创建50个元素,上下限是 0到 49。

变量范围
考虑以下 VB6 代码:

If x=y then
  Dim z as integer
  ' other code
End If
z=100  'Outside of If ... Then block

以上代码在VB6中运行得非常好,因为它没有模块级变量作用范围。模块级变量发生在其它高级编程语言中,如C++。在声明模块中定义的变量,如在 If ... Then模块中定义的变量,当这个声明模块结束时就会落在范围之外。这样一来,如果在其定义的If ... Then模块之外存取 z,在高级编程语言中就会导致一个错误。而VB.NET与VB6相反,它使用了模块层的变量范围。

Set和Let声明
在VB6中,你必须使用 Set声明为变量分配一个对象例示。出于默认属性的原因,这在VB6 中是必须的。要想告诉VB你想给对象本身指定一个变量(与对象的默认属性值相反),你就必须要使用Set关键字。例如,在 VB6中:

Dim x as Variant
Dim strName as string
'Assign the value of Text1.Text to StrName
'(Text is the default property of the textbox control in VB6)
StrName=Text1
'Here we assign the actual Textbox object to the variable x
'Note that we use the Set keyword so VB knows we want to assign
'to x the object itself instead of the default property
Set x=Text1

但是在VB.NET中,是不允许默认属性的(除非是参数化了的属性),因此就不需要使用 Set关键字。同样,Let关键字也从VB.NET 的语法中去掉了。

错误处理
Visual Basic最终结合了结构化错误处理。关键字Try、Catch和 Finally使得错误处理变简单,也使VB.NET与C++或 C#这些语言可以并列起来。Try ... Catch的模式允许开发人员将可能导致例外的代码放置在一个Try模块中。如果那个代码确实造成了一个例外(与造成错误同义),就执行 Catch 模块中的代码;这个模块中的代码应该是设计来处理例外的。

请注意,为了向后兼容,VB6中旧的错误处理技术( Error Resume Next及类似的)还是受到支持的,但是当你用VB.NET编写新的应用程序时应该勇敢地争取不使用这些旧的技术。下面的这些代码片段说明了VB.NET的各种错误处理技术:

Try
  ...
Catch
  ...
End Try

上面的代码只是捕捉相关的Try模块中冲突代码所导致的例外。VB.NET允许你使用多个Catch 模块来处理特殊的例外:

Try
  ...
Catch e1 as NullPointerException
  ...
Catch e2 as Exception
  ...
End Try

除了捕捉预先定义的例外,你还可以创建自己的定制例外类,这个类是从System.Exception基础类中继承而来的。你还可以激活自定义例外,这与VB6中Err 对象的Raise方法相同:

If myvar < 1000 then
  Throw new Exception("Business Logic Error")
End If

静态方法
VB.NET 允许你在类中创建静态方法。静态方法指的是那些不需要开发人员创建类的例示就能调用的方法。例如,如果有一个名为 Foo的类,其中有一个非静态方法NonStatic()和一个静态方法Static(),就可以这样来调用 Static()方法:

Foo.Static()  

但是,非静态方法则需要创建类的一个例示,象这样:

'Create an instance of the Foo class
Dim objFoo as New Foo()
'Execute the NonStatic() method
objFoo.NonStatic()   

要想在一个VB.NET 类中创建一个静态方法,只需要给方法定义加上前缀Shared关键字。

程序和函数
在默认状态下,VB6中所有的程序参数都是通过引用方式(ByRef)来传递的,而在VB.NET的默认状态下,这些参数是用值方式(ByVal)来传递的。不管程序和函数是否接收参数,当调用它们的时候都需要圆括号。VB6中,函数返回值使用这样的语法:FunctionName = return_value。在VB.NET 中,你可以使用Return关键字以Return return_value方式来返回值,也可以继续使用旧的语法,它们仍然有效。

属性语法
在VB6 中,我们使用了Property Get 和property Set/Let在类中创建属性,它们分别出现在单独的程序中:

Public Property Get PropertyName() as DataType
  ...
End Property
Public Property Let PropertyName(value as DataType)
  ...
End Property

在VB.NET中,Property Get 和 Property Let/Set这两个语句被合并成一个Property语句,而不再是两个单独的语句。另外,在Property 语句的Set部分中,变量Value指的是用户给指定属性赋值时输入的那个值。

Public [ReadOnly|WriteOnly] Property PropertyName as DataType
  Get
    Return m_var
  End Get
  
  Set
    M_var = Value
  End Set
End Property

结论
VB.NET的语义和语法都发生了一些变化,这里所列举的都是作为一个ASP.NET开发人员将要遇到的最重要的变化。当你用VB.NET创建ASP.NET Web页面时,需要牢记的最重要的几点是:

变量可以被分类,不再都是Variants。就是说,如果你需要一个Integer变量,就应该使用Dim i as Integer,而不仅仅是用Dim i。给变量分类比无分类的变量的性能要好得多。
要牢记,VB.NET要求子程序调用时在调用参数周围加圆括号。 这就是说Response.Write "Hello, World!" 会生成错误,正确的应该是Response.Write("Hello, World!")。
VB.NET 不再支持默认属性,你必须对希望从一个对象中存取的属性进行明确地说明。
声明数组时要注意,VB.NET中所有数组的下限都是0,上限则是由你规定的数字。 

时间: 2024-08-03 07:38:40

从VB6到VB.NET的变化综述(转)的相关文章

从VB6到VB.NET的变化综述 (转)

随着Microsoft .NET平台的发布,Visual Basic开始成为一种完全面向对象的语言,简称为VB.NET.虽然有了一些根本性的变化,开发者从VB6到VB.NET的学习热情依然相当高,即使对于有经验的编程人员也是如此.本文中,我将列出Visual Basic语言中的变化,并在适当的地方举例说明.这里所列出的可能不完全,但是已经包括了大部分的功能.如果你是一个想要转到VB.NET上去的 VB程序员,这篇文章就一定要读一读. ASP.NET Beta 1版本可以从http://www.a

在VB6和VB.NET中进行图象捕获

在VB6和VB.NET中进行图象捕获 VB6中进行图象捕获   '---------------------------------------------------------------------------- ' 'Author:lihonggen0 'Date:2002-6-19 '功能:抓屏 '---------------------------------------------------------------------------- Private Type POINT

VB6和VB.NET中对光标的编程

编程 在VB6中利用API对光标进行编程: Option ExplicitPrivate Type POINTAPI    X As Long    Y As LongEnd TypePrivate Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As LongPrivate Declare Function ShowCursor Lib "user32" (ByVal bShow A

VB.NET中的类

我在以前的文章里曾经提到:VB.NET的出现使得VB6在类的概念及其操作上发生了巨大的变化.现在就让我们进到这些变化中来进行更深入的探讨.首先让我们看看类到底意味着什么. 不妨假设我把你带回到了学院,现在你走进一个教室,我要求你解释一下什么是类(class),你可能会这样回答:"一组学生形成一个班(class)."呵呵,如果这样回答,你真是歪打正着了:没错,在这里,组就是最关键的词.用面向对象的编程思想来看,类就是存储数据同时给一组相关代码赋予协调功能的方式.类是面向对象编程的核心.

在VB.NET中实现拖放操作

第一次在csdn上发文章,希望大家帮忙使劲顶,鼓励一下新手,谢谢 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dv_vstechart/html/vbtchImpDragDrop.asp 在VB.NET中实现拖放操作 Implementing Drag and Drop in Visual Basic .NET Steve Hoag Visual Basic .NET Team Microsoft Corpor

从VB程序员到VB.Net程序员

程序|程序员 一.接受开发工具的升级,但仅此而已.工具是更好用了,程序还基本是原来那样写,套用一句老话:没有银弹. 二.首先要关注的是构架,也就是整个系统的结构.有许多好的构架可以利用,不用事事都自己动手,但一定要理解,并且多做练习. 三.学一些面向对象的概念,比如对象的封装性.继承性.多态性. 四.充分利用VB6到VB.Net的迁移工具,由此可以熟悉一些变化,一些常用的名字空间和类也可以籍此混个眼熟. 五.如果老是发现一些代码需要复制,粘贴,那么把它们都作成组件和自定义控件,因为在.Net下的

VB.net 新功能,例程 (翻译)

7.介绍VB.NETVB.net 或者说 VB7 有许多和旧版本的Visual basic 一样的语法,但是在许多方面,它是一门全新的语言.和VB先前的版本不一样,VB7是完全的面向对象的,一些普通的操作的实现因为这个不同而出现一些区别.出于这种原因,与其将它当成一个编译器来编译你已经写好的程序,不如最好将VB.NET当作是一种开发.NET应用程序的语言.由于VB.NET的格式还是不成熟的,因此在本文中当我们谈到VB.NET时,我们将用VB7来命名VB.NET.(我们将在小标题中延续VB.NET

VB.Net学习笔记(变量生存期和赋值)

笔记|变量 变量有生存周期这一点程序员们都了解,在VB.Net中增加了一个修饰Shared.Shared 关键字指示一个或多个被声明的编程元素将被共享.要点是:共享元素不关联于某类或结构的特定实例.需要通过使用类名或结构名称或者类或结构的特定实例的变量名称限定共享元素来访问它们.简单的描述就是Shared变量是为类型本身服务而不是为特定对象服务的. Shared举例 Public Class TestA Public Shared i As Int32 = 10 End Class Public

VB外接程序的设计- 得到VB的控制权

程序|控制|设计 VB外接程序的设计一,得到VB的控制权首先,外接,故名思意,当然必须是要和vb一起启动!在新建一外接工程后.新工程中设计器中有 Conncet.Dsr有这一元件,元件中有最为关键的一个事件 Private Sub AddinInstance_OnConnection(ByVal Application As Object, ByVal ConnectMode As AddInDesignerObjects.ext_ConnectMode, ByVal AddInInst As