|
在MSDN杂志2001年二月版中我写了一篇文章,介绍了新的Microsoft.NET架构和用Visual Basic .NET在这个平台下开发软件所要遵循的规则。在这篇文章中,我介绍了Microsoft彻底改造开发平台的动力以及对VisualBasic语言做重大修改的根本原因。现在我介绍的东西将建立在这个话题的基础之上,所以我假定你已经读过VisualBasic.NET: New Programming Model and Language Enhancements Boost Development Power这篇文章,或者已经对.NET平台有了较深的理解.
我在二月份的文章中更多的是总体介绍了commonlanguage runtime(CLR),现在我将着重讨论VisualBasic .NET编程方面的新特点。一旦你学会如何运用这些新的特点,我肯定你也会认为VisualBasic .Net是比以前版本更好的工具。不过,我不可能在一个专栏中涉及所有的新特点,所以这个月的专栏将是一个系列的开端,这个专栏系列将持续几个月。
如果你以前经常使用Visual Basic的话,你会发现VisualBasic .Net有点熟悉,又有一点陌生。在可以利用许多以前就具备的技巧和知识的同时,仍然有很多东西要学。
许多公司花费了大笔的资金投资于Visual Basic6.0编写的软件,这些公司将面临如何处理这些已存在的软件的问题。我在介绍Visual Basic .NET新特点的同时,将会介绍影响把代码移植到Visual Basic .NET的关键所在。正如你将看到的,会有很多问题要考虑。随着编程语言变得更加一致、强大和友好,你会发现把Visual Basic 6.0项目改写成Visual Basic .NET项目需要很大的努力和技术。如果顺利的话,你将有幸在不远的将来从零开始编写一个VisualBasic .NET的项目。
新的便利:
我首先将介绍用一行代码实现声明并初始化变量的新语法。尽管许多初学者会认为这种语法是理所当然的,但实际上那些已习惯于在Visual Basic用两行代码来声明和初始化变量的程序员会对此感到很欣慰。
这儿是利用了Visual Basic .NET语法优势的三个例子:
Dim x As Integer = 10
Dim obj1 As Class1 = New Class1
Dim obj2 As New Class2
请注意,与前两行不一样,最后一行用的是在Visual Basic 6.0中合法的语法,它在Visual Basic .NET中同样是合法的。然而,值得注意的是,这儿的As New语句在Visual Basic .NET and Visual Basic 6.0中的处理是不同的,许多有经验的程序员反对使用As New语句,因为它将导致初始化的延迟,进而导致较低的执行效率,并给调试程序带来了许多困难。
好消息是As New语法在Visual Basic .NET中并不会造成初始化的延迟,因此不会导致相同的问题。在看前面的例子时,你应该注意第三行,它用了As New语句,但与前面几行具有一样的执行效率。当你在Visual Basic .NET中使用As New语句时,这个对象将在执行下一行之前被创建、初始化,并指派给你的变量。
这种方便的初始化语法也可以被用在类或结构的定义中。正如你想得那样,语法应该是这样的:
Class Class1
Private Field1 As Integer = 10
Public Field2 As Class1 = New Class1
End Class
另一点值得注意的是,当你在同一行声明几个变量时,他们应该是相同类型的变量,请看这个例子:
Dim x, y, z As Integer
三个变量都被声明成integer类型,你不再需要担心前两个变量偶然会被当作variant类型。实际上,你不用担心有什么变量会被当作variant类型处理,因为variant类型不再被CLR编程模型所支持。现在的通用类型是System.Object.
在Visual Basic .NET新增加的语法中,我最喜欢的一点是现在函数可以用Return来向它的调用者返回一个值。请看下面的例子:
Function MyFunction() As String
Return "This is my return value"
End Function
这个例子和用其他语言(比如C语言)一样,Return语句将结束函数的执行,并把控制权返回给调用者。我觉得使用Return语句与我们在VisualBasic的早期版本中的做法相比要方便得多。正如你记得的,在以前的版本中,要返回给调用者的值必须在函数的内部被赋给函数名。由于在VisualBasic .NET中使用了Return语句,你可以很容易地实现更改函数名或把代码从一个函数中复制、粘贴到另一个函数,而不需要搜索函数的内容并替换原来的函数名。
消除矛盾
正如我在二月份的文章中提到的那样,在把一个对象指派给一个变量时,Visual Basic .NET既不需要,也不允许你用Set这个关键字。VisualBasic 6.0 和Visual Basic .NET的编译器有许多方面不一样,这就是其中之一。请看下面的代码:
Dim obj1, obj2, obj3, obj4 As Class1
obj1 = New Class1
obj2 = obj1
Set obj3 = New Class1
Set obj4 = obj3
第二行和第三行代码在Visual Basic .NET中是合法的。但在VisualBasic 6.0中编译时,它们将导致运行期错误。第四行和第五行的代码在VisualBasic 6.0中是合法的,但在Visual Basic .NET中却不能通过编译。正如你想象的,在把代码从VisualBasic 6.0移植到Visual Basic.NET时,需要特别注意对Set语句的改写。
在用Visual Basic .NET编写了六个多月的程序后,我发现自己仍然会使用Set语句,老习惯是不容易被改掉的。而且由于工作的关系, |
|