VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > VB.net教程 >
  • vb.net教程之如何向过程传递参数

如何向过程传递参数
过程中的代码通常需要某些关于程序状态的信息才能完成它的工作。信息包括在调用过程时传递到过程内的变量。当将变量传递到过程时,称变量为参数。
1.参数的数据类型

(相关vb.net教程)

过程的参数被缺省为具有Object数据类型,不过,也可以声明参数为其他数据类型。例如,下面的函数接受一个字符串和一个整数:
Function WhatsForLunch(WeekDay As String,Hour As Integer) As String
   '根据星期几和时间,返回午餐菜单
   If WeekDay="Friday" Then
      WhatsForLunch="Fish"
   Else
      WhatsForLunch="Chicken"
   End If
   If Hour>4 Then WhatsForLunch="Too Late"
End Function
2.按值传递参数
按值传递参数方式在vb.net中是缺省的。按值传递参数时,传递的只是变量的副本。如果过程改变了这个值,则所作变动只影响副本而不会影响变量本身。用“ByVal”关键字指出参数是按值来传递的。例如:
Sub PostAccounts(ByVal intAcctNum As Integer)
  '这里放语句
End Sub
注意:ByVal关键字可以省略。
3.按地址传递参数
按地址传递参数是过程用变量的内存地址去访问实际变量的内容。结果,将变量传递给过程时,通过过程可改变变量值。按地址传递参数如果给按地址传递参数指定数据类型,就必须将这种类型的值传给参数。Visual Basic计算表达式,如果可能的话,还会按要求的类型将值传递给参数。把变量转换成表达式的最简单的方法就是把它放在括号内。用“ByRef”关键字指出参数是按地址来传递的,按地址传递的效率比较高,因为,无论变量是什么类型,传进的都只是4个字节。如下例:参数“RunningTotal”是按地址传进来的,因此传进的变量值为参数“AcctNum”的值。
Sub PostAccount(ByVal AcctNum As Integer,ByRef RunningTotal As Single)
   RunningTotal=AcctNum
End Sub
4.使用可选的参数
在过程的参数列表中列入“Optional”关键字,就可以指定过程的参数为可选的。指定可选参数,根据以下三条规则:
(1)每个可选的参数一定要有一个缺省值;
(2)可选参数的缺省值必须是个常数;
(3)可选参数的后面的所有参数也需是可选参数
下面的例子给出了带有可选参数的过程的定义:
Sub subName(Optional ByVal MyCountry As String="China")
....
End Sub
当调用这个过程的时候,可以选择是否给过程传递参数,如果不传递参数,则过程使用缺省的参数。
有的时候也许不想给可选参数传值,而且也不希望使用缺省值,但这种情况Visual Basic是不允许的,这时只要给可选参数设定一个不会用到的缺省值就可以解决这个问题了,如下例:
Sub PlaceInfo(ByVal State As String,Optional ByVal Country As String="QJx")
   If Country="QJZ" Then
      Debug.WriteLine("Country not supplied-using Australia")
      Country="Australia"
   End If
   MsgBox("The state of"&State&"is in"&Country)
End Sub
可以这样调用这个过程:
PlaceInfo(state:="Maryland",Country:="USA")
'...
PlaceInfo(State:="Queensland")

5.使用不定数量的参数
一般来说,过程调用中的参数个数应等于过程说明的参数个数。可用一个参数数组向过程传递参数,当定义过程时候,不必知道参数数组中的元素的个数,参数数组的大小由每次调用过程时决定。
用关键字“ParamArray”表示数组参数,其规则如下:
(1)一个过程只能有一个参数数组,而且参数数组必须在其他参数的后面。
(2)参数数组必须是按值传递的,在过程定义此参数数组时,明确有关键字“ByVal”。
(3)参数数组必须是一维数组,参数数组本身的每个元素必须是同一种类型的,如果没定义,按Object类型处理。
(4)参数数组一旦声明就是可选参数,它的缺省值就是每种类型的Empty值。
下面例子说明了参数数组的使用:
Sub StudentScores(Name As String,ByVal ParmArray Scores() As Object)
   Dim I As Integer
   Debug.WriteLine("Scores for"&Name&":")
   'Use UBound function to determine largest subscript of array
   For I=0 To UBound(Scores())
       Debug.WriteLine("score"&I&":"&Scores(I))
   Next I
End Sub
可以这样调用这个过程:
StudentScores("Jamie",10,26,32,15,22,24,16)
  '...
StudentScores("Kelly","High","Low","Average","High")

相关教程