消除矛盾
正如我在二月份的文章中提到的那样,在把一个对象指派给一个变量时,Visual Basic .NET既不需要,也不允许你用Set这个关键字。VisualBasic 6.0 和Visual Basic .NET的编译器有许多方面不一样,这就是其中之一。请看下面的代码:
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语句,老习惯是不容易被改掉的。而且由于工作的关系,有好几次我得在同一天即用VisualBasic.NET,又用Visual Basic 6.0编写程序。不停地来回往复真地很困难。
在参数传递中括号的使用也发生了变化,这也给代码移植增加了困难。你们中的许多人在经过多年的编程之后已经习惯了调用函数和子程序的规则和特点。VisualBasic.NET小组觉得应该实现调用方法的一致性。
在Visual Basic. NET中,参数传递的规则很简单。当你调用一个函数或子程序并需要传递一个或多个参数时,必须用小括号把参数括起来。当调用一个不需要参数的函数或子程序时,小括号可以被省略。你不得不承认,与早期版本的VisualBasic中的规则相比,这些规则更直截了当,也更容易去学。
值得注意另一点是参数传递的默认方式也改变了。比如,当一个方法被定义成下面这种样式时,参数是如何被传给调用者的。
Sub Method1(Param1 As Integer)
' implementation
End Sub
在Visual Basic以前的版本中,Param1是引用传递的。也就是说在执行Method1时,改变这个integer类型的参数将导致调用者中相应的实际参数的值的改变。而在VisualBasic.NET中,默认的参数传递方式变成了值传递。也就是说执行Method1时,只是值被传递给了Param1,并且在Method1中改变Parame1的值不会改变调用者中相应的实际参数的值。很明显,在把VisualBasic 6.0中代码移植到Visual Basic.NET,这种参数传递默认方式的改变将破坏一些代码的语义。
请注意,在上一个例子中,被传递到参数的是一个值而不是地址。基本类型比如Byte,Integer,Double, and Boolean都是值类型。用户定义的枚举和结构类型也是值类型。在以值传递方式传递时,变量总是被复制。
当你传递的参数是基于类时,情况就不同了。基于类的参数是引用类型而不是值类型。它们被用来传递对象的引用。如果一个调用者传递了一个对象的引用给一个用了值传递方式的方法,在这个方法的实现中,对象的状态可能被改变。这种状态的改变将反映到调用者中。因此,无论你把参数声明成值传递还是引用传递,注意值类型还是引用类型之间的区别是很重要的。
Web: http://www.qqread.com/vbdotnet/i671104002.html相关专题
- .NET移动与嵌入式技术 (5950篇文章)
- .NET开发手册 (5652篇文章)
- .NET基础介绍 (713篇文章)
- vb.net入门——OpenFileDialog 组件的使用 (75次浏览)
- vb.net入门——FontDialog 组件的使用 (52次浏览)
- vb.net入门——FolderBrowserDialog 组件的使 (45次浏览)
- vb.net入门——ColorDialog 组件的使用 (41次浏览)
- 用vb.net创建一个鼠标绘图程序 (39次浏览)
- vb.net入门——SaveFileDialog 组件的使用 (38次浏览)
- 在vb.net中用ado.net连接Access (25次浏览)
- VB.NET关于加密算法 (18次浏览)
- 用vb.net实现闹钟提醒程序 (9次浏览)
- vb.net GDI+入门——画笔、画刷和颜色 (3次浏览)



