Visual Basic .NET中的语言创新
引言
要快速地创建企业Web应用程序,开发人员必须依靠可伸缩的、健壮的、可重用的商务逻辑。在过去的几年中,面向对象的程序设计已经成为了创建满足这些需求的系统的主要技术。使用面向对象的程序设计语言可以使得大型系统更容易理解,更容易调试,并且更新速度更快。
为了使Visual Basic开发人员从面向对象的设计中获益,简化企业Web应用程序的开发,将在Visual Basic的下一个版本 - Visual Basic .NET中支持包括实现继承在内所有的面向对象的语言特性。利用这些新的语言特性,Visual Basic .NET将迅速有效地提供开发企业关键的应用程序所需的所有强大功能,而同时保持使其成为世界上最流行的开发工具的即时可达性。
Visual Basic .NET将提供第一流的面向对象的、拥有新特性的程序设计语言,如实现继承、重载和带参数的构造函数。此外,开发人员将能够创建高度可伸缩的具有明确的自由线程(free threading)代码,以及加入了现代化的语言结构,如结构化的异常处理的高度可维护的代码。Visual Basic将提供开发人员使用下面的新特性,创建健壮的、可伸缩的分布式Web应用程序所需的所有语言特性:
新的面向对象的程序设计特性
继承
重载
带参数的构造函数
其他现代化的语言特性
自由线程
结构化的异常处理
严格的类型检查
共享成员
初始化工具
语言创新的历史
Visual Basic语言有一个很长的更新历史,它反映了Windows平台中的根本性的变化。例如,使QuickBasic?为支持Windows 3.0 GUI开发所作出的重大变化导致了Visual Basic的首次发布。在Visual Basic 4.0中,向基于COM的程序设计转移导致了用于创建DLL的语言结构的出现。而在Visual Basic 5.0中,语言发展为支持创建COM控件。
利用每次成功的修订,Visual Basic的普及有了飞速的增长。新的面向对象的语言特性提供给创建企业Web应用程序的开发人员的启动功能,将最有可能继续这种趋势。
面向对象的程序设计
对于传统的结构化的程序设计(数据与程序式的代码分别存储),存在几个缺点。作为结构化的代码编写的任何代码都不是模块化的。由于数据元素可以从任何代码中访问,因此在没有开发人员的知识的情况下,修改数据是不可能的。这可能会导致非常难调试的运行错误。此外,维护也可能会成为一项实质性的任务。试图理解使用程序式设计改变一行代码的全局影响可能会非常困难。最后,依靠程序员来管理代码和数据将导致非常低的重用率。
面向对象的程序设计(OOP,Object-oriented Programming)解决了这些问题。它将数据以及在数据上采取行动的方法打包成一个称为对象的单位中。一个对象的数据可以被隐藏起来,以避免出现未授权的修改。此外,这个对象提供了一组公共方法对这个数据进行操作。这种概念被称为封装。由于实现细节与接口分离,底层的程序设计逻辑可以在日后修改,而不用担心破坏调用这个对象的代码。
OOP还允许开发人员通过继承重用代码和数据。通过继承预定义的对象,开发人员可以更迅速地构造更复杂的应用程序。由于编写新代码通常有可能加进错误,因此重用代码可以使出现额外错误的机会降到最低。
为了解决这些需求,Visual Basic .NET将提供这些额外的语言特性,这将使得它称为第一流的具有上述的所有好处的、面向对象的程序设计语言。
继承
一贯地,对Visual Basic最突出的请求是支持实现继承(implementation inheritance)。Internet时代的程序开发需要快速的编译和大量的重用。Visual Basic 现在包括了包括可视化窗体继承在内的全部实现继承。
开发人员可以使用新的关键字Inherits来从一个已有的类派生。
Class1
Function GetCustomer()
...
End Function
Class2
Inherits Class1
Function GetOrders()
...
End Function
Inherits语句支持与继承相关的所有可视化属性。派生类的实例支持这个基类所支持的所有方法和接口。当然,派生类可以扩展基类所支持的方法和接口集合。
派生类可以使用关键字Overrides重载基类中定义的方法。为了减少程序设计错误,Visual Basic可以防止你意外地重载一个函数;只有被声明为"Overridable(可重载)"地函数才能在派生类中被重载。
重载
Visual Basic现在允许进行函数重载,这使得开发人员可以创建有相同名称,但却有不同的自变量类型的、不同版本的Sub或Function。
当你的对象模型规定,对于操作不同数据类型的过程使用类似的名称时,重载尤其有用。例如,一个可以显示几种数据类型的类可能会有如下所示的Display过程:
Overloads Sub Display (theChar As Char)
...
Overloads Sub Display (theInteger As Integer)
...
Overloads Sub Display (theDouble As Double)
如果没有重载,你将不得不为每个过程使用截然不同的名称,或者使用一个Variant参数。重载提供了一个处理多种数据类型的更明确、更有效的方法。
带参数的构造函数
带参数的构造函数(或简单地称为构造函数)允许你创建类的新的实例,而同时将变量传递给新的实例。构造函数对于面向对象的程序设计至关重要,因为它们允许实例的创造者向用户定义的构造代码传递参数。它们通过允许在单个表达式中创建和初始化一个新的实例,简化了客户代码。
其他现代化的语言特性
Visual Basic .NET添加了许多额外的结构,简化了更健壮、更具可伸缩性的应用程序的开发。这些特性包括自由线程、结构化的异常处理、严格的类型安全性,以及生产力特性,如初始化工具和共享成员。
自由线程
今天当开发人员在Visual Basic中创建应用程序时,他们编写的代码是同步的。这意味着,每行代码必须在下一行代码之前执行。当开发Web应用程序时,可伸缩性是关键。开发人员需要支持并发处理的工具。
通过包含自由线程,开发人员可以产生一个执行某些长期任务、执行复杂的查询或运行多部分的计算的线程,而应用程序的其他部分则继续执行,从而提供了异步处理功能。
Sub CreateMyThread()
Dim b As BackGroundWork
Dim t As Thread
Set b = New BackGroundWork()
Set t = New Thread
(New ThreadStart(AddressOf b.Doit))
t.Start
End Sub
Class BackGroundWork
Sub DoIt()
…
End Sub
End Class
结构化的异常处理
开发企业应用程序需要构造可重用的、可维护的组件。在以前版本的Visual Basic中,Basic语言的一个具有挑战性的方面就是支持错误处理。开发人员发现,一个一致的错误处理模式意味着可以大量的复制代码。使用现有的On Error GoTo语句进行错误处理使大型应用程序的开发和维护速度变得很慢。它的名字就反映了某些问题:正如GoTo所暗示的,当一个错误发生时,控制被转移给子程序中某个标记的位置。一旦错误代码运行,通常它必须通过标准的GoTo依靠另一个清除位置转移,它最终将使用另一个GoTo或Exit来推出这个过程。利用各种Resume和Next组合快速地处理几个不同的错误,将产生难读地代码,并且在执行路径没有完全考虑到时将会导致出现频繁的错误。
利用Try...Catch...Finally,这些问题迎刃而解,开发人员可以嵌套他们的异常处理,并且有一个控制结构用于编写在正常和异常条件下都执行的清除代码。
Sub SEH()
Try
Open "TESTFILE" For Output As #1
Write #1, CustomerInformation
Catch
Kill "TESTFILE"
Finally
Close #1
End try
End Sub
严格的类型检查
今天,Visual Basic语言在其产生的隐含类型强制方面非常自由。对于变量以及传递而非引用的参数类说,Visual Basic编译器通过产生运行强制,可以将允许几乎所有的数据类型转换成任何其他类型。如果要转换的数值不能在没有数据丢失的情况下进行转换,则运行强制操作将实效。通过添加一个新的编译选项,Visual Basic可以对于可能会在运行时引起错误的任何强制生成编译错误。选项"Strict"通过在需要进行转换而转换可能会在运行时失败,或像数字类型和字符串之间的自动类型转换不是用户所预期的时候生成错误,从而提高了类型安全性。
共享成员
共享成员是指可以被类的所有实例共享的类的数据和函数成员。在一个类的所有实例间共享一个数据成员或函数成员的实例,在使用继承的Visual Basic应用程序中是必需的。一个共享的数据成员独立于这个类的任何一个具体的实例而存在。一个共享的方法是与普通的方法不同,它并不被隐含地传递类的实例。由于这个原因,在一个共享的方法中,不允许不合格的引用非共享的数据成员。公共的共享成员可以远程访问,并且可以从这个类的某个实例中对它们进行晚绑定。
初始化工具
Visual Basic .NET支持在变量被声明的一行中对其进行初始化。初始化可以用在任何位置,包括框架结构内部。包括初始化工具的过程层次的声明的语义,与紧跟一个赋值语句的声明语句相同。换句话说,这个语句"
Dim X As Integer = 1
与下面的这些语句意义相同:
Dim X As Integer
X = 1
结论
Visual Basic现在已经成了第一流的面向对象的程序设计语言。使用Visual Basic .NET,开发人员将能够创建高度可伸缩的、具有明确的自由线程(Free Threading)代码。他们的代码使用了现代化的语言结构,如结构化的异常处理(Structured Exception Handling),具有很高的可维护性。Visual Basic将提供开发人员创建健壮的、可伸缩的分布式Web应用程序所需的所有特性。
关键词:Visual Basic .NET中的语言创新