分享
 
 
 

全面剖析VB.NET(1)

王朝c#·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

前言

大约到2001年的第4季度,Visual Basic的下一个版本Visual Basic.NET将会正式发行。新版的Visual Basic.NET拥有许多VB开发者以前只能梦想的新功能和新特色。同时,成长和发展也意味着付出一定的代价,新的Visual Basic.NET中有许多东西需要重新学习,一些细微的变化很可能带来出乎意料的麻烦。

Microsoft .NET平台所包含的内容非常广泛。本文将去粗存精,对VB.NET作一个全景式的介绍,看看它到底是什么,有些什么用处,以及如何使用。特别地,本文将分析VB.NET集成开发环境的变化,面向对象功能,底层体系的变化,众多的语法改进,对应用部署和封装支持方面的增强等。

一、集成开发环境

第一次启动VB.NET时,你首先注意到的不会是Visual Basic优秀的面向对象支持,而应该是它的IDE(集成开发环境,Integrated Development Environment)。VS.NET的IDE给人以非常熟悉的感觉,因为设计这个IDE的工作组以前就设计过VB的IDE,VS.NET IDE的改进建立在设计VB IDE的经验之上。

图A:点击放大

对于IDE的改进并不停留在表面上。所有.NET语言都使用相同的IDE,IDE内提供的新工具非常全面和强大。例如,所有的设计窗口都可以自动隐藏(就象Windows任务条一样),从而显著地减少了混乱的感觉。

启动VB.NET时,“VS Home Page”是我们看到的第一个界面。Home Page中显示了最近修改的工程,并提供了打开现有工程、创建新工程的选项(如图A所示)。所有这些选项都以HTML链接形式显示。注意这并不是什么模拟出来的效果,Home Page的布局事实上就是由DHTML编写而成。由于这个原因,用户可以定制Home Page显示其他对自己有用的选项、信息以及HTML链接。

New Project对话框中提供了用任意一种语言创建工程的选项,如图B所示,注意图中左边树形列表中列出了好几种语言。如果系统中已经安装了支持VS.NET的第三方语言,Microsoft或许还会在这个列表中包含这些语言。

图B:点击放大

图B中,树形列表中的VB节点处于打开状态,右边的一些图标显示了创建新工程的几个选项。注意这里出现了一些新的选项,如Web Service、Web Control Library、Class Library。最后一个选项显示出:在VB.NET中,多个相关的类可以合并放入单个模块文件之中,而不是象VB6那样把每个类单独放入一个文件。

激活WinForms工程时的IDE与传统VB IDE最为相似。图C显示了两者最主要的区别。

图C:点击放大

▲ 隐藏工具框。默认情况下,工具框大多数时候都是隐藏的,点击它的标题可以把它“拉出来”(图D显示了一个已经扩展的工具框。如有必要,可以设置工具框使其总是显示在屏幕上)。对于VB开发者来说,这里最大的变化在于工具框中的控件现在改为垂直排列,每个图标都加上了文字说明,而不象VB6那样只有一个图标。

图D:点击放大

▲ 卡式子窗口(Tabbed Child Window)。VS.NET利用位于屏幕上方的卡式子窗口布局取代了原来的MDI子窗口布局。卡包括:Home Page,窗体布局窗口,代码窗口,帮助屏幕。

▲ 任务列表(Task List)。Task List是一个重要的改进,它帮助开发者跟踪所有待完成的任务。代码生成器、编译器会在Task List中自动加上一些内容。手工添加任务项目可以按照如下方式进行:找到代码中需要修改的地方,然后插入一行以“TODO:”开头的注释,此后该任务就会自动出现在任务列表中。点击Task List中的某个任务,代码编辑器中就会出现完成该任务的位置。这种快速定义任务、返回任务的机制将极大地提高开发效率。

▲ 方案资源管理器(Solution Explore)。它替代了原来的工程资源管理器(Project Explorer),与Visual InterDev中的资源管理器非常相似。和InterDev中的资源管理器一样,Solution Explorer显示了工程所用到的各种资源,包括用其他语言编写的代码模块、各种非代码的资源。其中References是Solution Explorer中一种全新的资源形式,References管理着命名空间,类似于VB6中的组件引用。

▲ 属性框(Properties)。Properties框与VB6中的属性框非常相似,但它现在支持更多的布局方式(显示方式)。

▲ 窗体布局工具条(Form Layout)。在VB6中,在窗体上排列控件的任务通过一个名为“Form Editor”的工具条完成。改进后的新工具条提供更多的功能,而且在WinForms类型的工程中默认打开。

图E:点击放大

除了上面六处改进之外,VB.NET的代码编辑器还有一个重要的新功能:在代码编辑窗口中,点击代码行左边的加号或者减号可以扩展或者折叠代码块,如图E所示。这个功能原本为隐藏可视化设计器自动生成的代码而设计,但它也可以用于隐藏与当前任务无关的代码。

Web Forms工程的设计环境也和原来VB6的设计环境略有不同,如图F所示。在表单布局窗口的下面只显示了两个卡,分别为Design和HTML。这两个卡的功能和Visual InterDev中同一位置的卡相似。Design窗口用来编辑窗体的外观,HTML窗口用于查看DHTML代码。

图F:点击放大

VB.NET另外一个引人注目的变化是它的窗体引擎。Microsoft放弃了原来的窗体引擎,现在它给我们提供的是Windows Forms窗体引擎。所有基于CLR的语言都使用Windows Forms引擎,与VB 6的窗体引擎相比,Windows Forms有着许多突出的优点。例如,Windows Forms支持创建那些自动改变组件大小的窗体,允许把控件锚定到窗体的特定位置。也就是说,完成这些特殊任务时再也不需要第三方的工具了。Windows Forms还有一些有趣的技术,比如创建透明窗体等。

以前,VB隐藏了窗体构造过程中的所有细节。我们在IDE中设计窗体,然后把代码加入到Initialize事件,但对这两者之间的处理过程却无法进行任何控制。现在,窗体成了类,类里面包含了构造窗体的全部代码。大多数程序员都不会去看这种描述窗口构造细节的代码,如果说有某种操作一定会破坏应用,这个操作就是搞乱这里的代码。另一方面,由于这些代码允许用户深入控制VB.NET构造窗体的幕后细节,有经验的用户能够利用这些代码实现各种高级功能。如果你不想看到这些代码,你可以不看,因为新的代码编辑器有扩展和折叠代码区域的功能,描述窗体构造过程细节的代码默认处于折叠状态。代码编辑器还有其他一些新的实用功能,比如自动缩进、内建的行号显示功能等。

二、语法

很久以来,VB因为缺乏完善的面向对象支持、缺乏高效的错误处理机制和性能表现不佳,因而一直受到某些人的嘲笑。VB.NET将彻底改变这种情况。然而,VB.NET在这些方面的改进也要付出代价,许多旧的代码需要手工进行转换才能在VB.NET下运行。

下面几个表格总结了VB.NET语言在语法上的改动之处。注意这些表格并没有完全列出所有改动之处,但列出了最重要的一些改动。

表A对比了VB6中一些熟悉的语法形式及其在VB.NET中类似功能最接近的语法形式。

表A:语法对比

旧语法 新语法 说明

窗体装载事件,类初始化事件 Sub New procedure Sub New称为构造方法(Constructor),它可以有参数。

Property Let Property Set Let关键词不再有效。

Currency Decimal 在VB6中,Decimal是Variant的一种子类型,但在.NET中它是一种固有的数据类型。.NET不再支持Currency数据类型。

Variant Object VB.NET的Object数据类型兼有VB6 Object类型和Variant类型的能力。

Debug.Print Debug.Write Debug.WriteLine 这个变化只是名称上的简单变化:从Print变为Write和WriteLine。

Wend End While VB.NET推荐使用While循环而不是Do循环。

为了让VB的数据类型和其他.NET语言的数据类型相匹配,Microsoft修改了整数类数据类型的表示方法,并加入了一个新的数据类型。这些改动对于进行外部调用的方法尤其重要(比如API调用)。例如,如果被调用函数需要一个32位的整数参数,则在VB6中它应该声明为Long,在VB.NET中应该声明为Integer。

表B:和整数有关的数据类型

长度 VB6以及更早版本中的名称 VB.NET中的名称

16 bit Integer Short

32 bit Long Integer

64 bit (无) Long

在VB.NET中,Microsoft减少了许多原先用于VB6的关键词,代之以“框架类”。之所以要进行这种替换,是因为框架类中的功能对所有的.NET语言都有效。下表列出了部分受影响的关键词。

表C:被替换的关键词

VB关键词 VB.NET名称空间中的位置 方法/属性

Circle System.Drawing.Graphics DrawEllipse

Line System.Drawing.Graphics DrawLine

Atn System.Math Atan

Sgn System.Math Sign

Sqr System.Math Sqrt

Rnd Microsoft.VisualBasic.Compatibility.VB6 Rnd

Round Microsoft.VisualBasic.Compatibility.VB6 Round

Lset System.String PadRight

Rset System.String PadLeft

DoEvents System.Winforms.Application DoEvents

VarType System.Object GetType(返回类Type的对象,其中包含了可提取出信息的属性)

在VB.NET中,变量、数组的声明和初始化方法都有所变化,下表概要地列出了VB.NET在这方面的变化。

表D:新的声明方法

变化 语法举例

单个声明语句中不能声明多种类型。 'VB.NET不允许出现下面这种声明!

Dim nCount As Integer, bAnswer As Boolean

声明变量时可赋予初始值 Dim nCount As Integer = 20

Dim nDoubleCount as Integer = nCount * 2

允许为数组元素指定初始值 Dim nIndex(3) As Integer = (3, 5, 7)

不能用Redim进行声明,只能用Redim重新定义数组大小。 '下面这行代码在VB.NET中不合法!

Redim sName() As String

大量新关键词实现了VB.NET中的新功能。下面是一些最重要的关键词及其用途、用法简例。

表E:VB.NET的新关键词

关键词 用途 简单例子

Inherits 指向基类,用于实现继承。 Inherits System.WinForms.Form

MyBase 在子类的代码中,MyBase引用基类。 StringProperty = MyBase.StringProperty

Shared Shared表示类的所有实例共享类里面的变量。 Public Shared BaseLocation As String

Try

Catch

Finally

Throw 这是新的错误处理关键词。Try开始一个启用错误控制的代码块,Catch标识一个对特定错误进行处理的代码块,Finally开始一个不管错误是否出现都必须执行的代码块,Throw抛出一个错误(类似于VB6的Err.Raise)。 Try

rsRecordset.Update

Catch

LogError ("更新失败!")

Finally

rsRecordset.MoveNext

End Try

ReadOnly 在属性声明中,ReadOnly指示一个只读的属性(只有Get过程的属性)。 Public ReadOnly Property

StringProperty() As String

WriteOnly 在属性声明中,WriteOnly指示一个只能写入的属性(只有Set过程的属性)。 Public WriteOnly Property

StringProperty() As String

Char 这是VB.NET中的单字符数据类型。 Dim chrInitial As Char

Imports 在当前代码模块中引入指定类。 Imports System.WinForms

Namespace 为模块指定名称空间(Namespace)。 Namespace MyApplicationName

Overloads 重载。Overloads表示同一个函数名字有多个版本的实现,编译器通过函数的参数列表区分它们。 '同一个模块之内包含如下多个声明...

Overloads Sub Display(sIn as String)

Overloads Sub Display(nIn as Long)

Overrides 覆盖。Overrides表示成员函数覆盖当前类所继承的基类中的指定方法。 Inherits MyBaseClass

Overrides Function Name(nID as Long) _

As String

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有