VB正在不断地发展中,它具备了以前VB编程人员作梦都想拥有的性能,想象一下你将随心所欲的利用这些性能,是不是很令人激动?然而,这个计划于2001年第四季度上市销售的VB版本可能会给你带来些小麻烦,因为要完全掌握它需要一个较长的学习周期,而且其中包括了一些微妙的变化,你可能在使用他们的时候出现错误。
需要准备的条件:建议获得Visual Basic.NET beta版,这些内容对所有VB程序员都是有用的。
Microsoft .NET平台的涵盖面很广,而且很难预测它的真正意义。我们注意到,现在有很多关于.NET的不正确的理解。因此在这篇文章里,我们将把给你一个VB.NET到底是些什么的概念,从头到尾说一说它是什么、它能干什么以及怎样才能充分发挥它的优点。我们要特别地细看一下IDE的改变、面向对象特征、底层结构的改变、一些“现代化”的语法以及包装和分发方面的增强。我们将讨论这些功能能为你做什么,解释他们的优点与不足。由于这些改变是如此之大,而且涉及方方面面,因此希望这一篇文章能满足你全部的要求是不现实的,要了解这方面全部的知识请参阅有关文章和书籍。
Visual Basic.NET 和你现在所知的开发工具完全不同,并且这个新版本会改变你的未来。到底有多大不同?如果你觉得从VB3迁移到VB4是一个很大的变化,那这次VB.NET会让你感到震惊。这次升级与其说是VB的一个新版本,还不如说是迁移到一个新平台上,你所面临的情况就和从DOS迁移到Windows差不多。
VB获得了继承能力
VB.NET预期拥有的第一新功能就是继承能力。继承是VB开发者长期以来要求得最多的功能。判断一下对继承的要求是不是像早些时候对本地化编译器的要求一样将是一件很有意思的事,后者,当Microsoft提供了一个以后,你就几乎听不到多少这方面的言语了。
Visual Basic现在是真正的面向对象语言了。过去,你可以通过使用VB的界面继承性创建伪实现的对象继承,但现在不必这样做了。
Visual Basic.NET 现在提供大量面向对象功能,包括应用程序继承,它允许你从其它类导出你想创建的类。像在其它面向对象语言里一样,你能覆盖基类的方法和属性,并且能实现多态以创建健壮的、扩展性好的组件。例如,假定你从基类 Crane里继承产生了一个ForkLift类,你能使用像下面的代码覆盖基类里对Lift方法的默认实现:
以下是引用片段:Public Class ForkLift Inherits Crane Overrides Sub Lift(ByRef _ Height As Double) Height = Height + 10 End Sub End Class
VB.NET不仅能让你覆盖方法或属性;它还能让你重载方法。重载是定义同名、但使用不同数据类型的方法或属性的能力。例如,假定你有一个组件能对不同数据类型的数组进行排序,你不需要三个(每种数据类型一个)不同名的方法;实际上你可以重载一个方法名:
以下是引用片段:Overloads Sub SortArray(ByRef _ aValues()As String) ... Overloads Sub SortArray(ByRef _ aValues() As Integer) ... Overloads Sub SortArray(ByRef _ aValues() As Object)
另一个改变是:表单现在是类模块。这就是说类本身包含建立表单的所有“肥料”的代码。你可能想知道,为什么你不得不看到这些从前不用看的代码,但这个改变同时带来强大的新功能,包括继承这些表单的能力。Microsoft把这一技术称为可视化继承。假定你的对话框有一种标准的格式,例如在表单的一侧有一行按钮,并在角上有一个标识,那么,通过可视化继承你能创建一个表单模板(类),并从这个基类里导出所需的表单。
一切都是对象
代码复用简化了开发过程,像实现和可视化继承这样的功能有利于更简单、更强大的代码复用。然而,代码复用并不是到此为止。你能通过支持VB.NET的通用语言运行库(Common Language Runtime - CLR)继承在其它 VS.NET 语言里定义的类。例如,你或别人创建了一个 C# 类,然后就能从 VB 里继承它。
VB.NET 的面向对象能力扩展了语言本身的通路:一切都是对象。这意味着比在以前的 VB 版本里,你获得了更多的内在功能,你将很少被迫使用 Windows API。例如,在以前的 VB 版本里,你使用 LoadPicture 方法加载图片并使用表单的 Line 方法(或较快的 API) 画线。现在,你使用 System.Drawing 对象来创建并处理图形。你可以使用以下代码在表单上显示一幅图片:
以下是引用片段:picshowpicture.Image = _ system.Drawing.Image.FromFile( _ "c:\test.bmp")
注意 VB.NET 的“一切都是对象”方式让你的语句能用得更长久。
考虑以下语句,它在一个图形对象上画一条黄绿色的线:
以下是引用片段:objgraphics.DrawLine(system.Drawing. _ Pens.Chartreuse, 0, 0, 100, 100)
这些长长的语句也有好处:改进的功能、适应性和易用性。从前,你要实现先进的功能就不得不在文档中挖掘,经常是不得不诉诸API。现在,相关的功能集符合逻辑地包含在对象里。这种处理方式的另外一个好处就是:类把相关的功能很好的组织了起来。所以,浏览你感兴趣的对象,发现它们做些什么实际上很有意思。
Visual Basic.NET的面向对象功能提供了很多实在的好处。很多情况下,VB.NET面向对象的本质和实现的继承性能帮助你比在以前的VB版本里更容易、更迅速地创建特定类型的功能。然而,你不一定要仅仅因为你能做到,就使用实现继承性或其它.NET功能。VB.NET的新功能使开发许多类型的应用程序变得更简单!但是,就像使用所有的语言能力一样,你需要使用的是在特定场合下最适合的功能。
对于自由线程可能需要特别给出警告。VB6允许你使用独立的线程来创建多线程服务器程序,但VB过去从来没有让你能创建自由线程的客户端程序。VB.NET改变了这一切。现在,创建自由线程应用程序几乎成了最微不足道的事情。实际上,我估计那些没有理解其中的微妙差别,就在他们的应用程序里添加了自由线程的程序员会遇到很多问题。只需要几行代码就能启动一个新线程:简单地将线索对象的地址传递给方法,方法本身就会启动线程。这确实是很酷也很有用的东西,但你需要小心:这些功能适用于特定的场合,确定哪些是适用的场合并且明智的使用这些工具则是你自己的事。许多开发者使用继承性和自由线程时给自己找了不少麻烦,请不要让这些发生在你身上。
可能大家讨论得最多的 VB.NET特征就是CLR(通用语言运行库),VB运行在它的顶层上。是CLR提供了VB.NET的许多关键功能。例如,CLR 使实现和跨语言继承性以及自由线程成为可能。
分发VB程序要求你同时分发VB的运行库,在VB6里即是msvbvm60.dll。许多其它语言也有类似的要求,包括 C++ 和 Java。在Visual Studio.NET里,所有的Visual Studio语言共享同一个运行库:CLR。这里有几个较大的变化,首先,所有的Visual Studio语言现在都共享同一个IDE、同样的表单引擎、同样的异常处理机制等等。这意味着Visual Basic和像 C#这样的语言拥有同等的地位,至少差不多是同等的。