PD虚拟机    VPS    微软    Win10    苹果    Office2016

VB编程基础教程13-向过程传递参数

 编程开发   2005-02-25

向过程传递参数

过程中的代码通常需要某些关于程序状态的信息才能完成它的工作。信息包括在调用过程时传递到过程内的变量。当将变量传递到过程时,称变量为参数。
参数的数据类型
过程的参数被缺省为具有 variant 数据类型。不过,也可以声明参数为其它数据类型。例如,下面的函数接受一个字符串和一个整数:
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
详细信息 关于 visual basic 的数据类型,请参阅本章前面部分。也可以在语言参考中查找指定的数据类型。
按值传递参数
按值传递参数时,传递的只是变量的副本。如果过程改变了这个值,则所作变动只影响副本而不会影响变量本身。用 byval 关键字指出参数是按值来传递的。
例如:
sub postaccounts (byval intacctnum as integer)
   .
   . ’这里放语句。
   .
end sub
按地址传递参数
按地址传递参数使过程用变量的内存地址去访问实际变量的内容。结果,将变量传递给过程时,通过过程可永远改变变量值。按地址传递参数在 visual basic 中是缺省的。
如果给按地址传递参数指定数据类型,就必须将这种类型的值传给参数。可以给参数传递一个表达式,而不是数据类型。visual basic 计算表达式,如果可能的话,还会按要求的类型将值传递给参数。
把变量转换成表达式的最简单的方法就是把它放在括号内。例如,为了把声明为整数的变量传递给过程,该过程以字符串为参数,则可以用下面的语句:
sub callingprocedure ()
   dim intx as integer
   intx = 12 * 3
   foo (intx)
end sub
sub foo (bar as string)
   msgbox bar            ‘bar 的值为字符串‘ 36 ’。
end sub
使用可选的参数
在过程的参数列表中列入 optional 关键字,就可以指定过程的参数为可选的。如果指定了可选参数,则参数表中此参数后面的其它参数也必是可选的,并且要用 optional 关键字来声明。下面两段示例代码假定有一个窗体,其内有一命令按钮和一列表框。
例如,这段代码提供所有可选参数:
dim strname as string
dim straddress as string
sub listtext(optional x as string, optional y _
as string)
   list1.additem x
   list1.additem y
end sub
private sub command1_click ()
   strname = "yourname"
optional
   straddress = 12345            ’提供了两个参数。
   call listtext (strname, straddress)
end sub
而下面的代码并未提供全部可选参数:
dim strname as string
dim varaddress as variant
sub listtext (x as string, optional y as variant)
   list1.additem x
   if not ismissing (y) then
      list1.additem y
   end if
end sub
private sub command1_click ()
   strname = "yourname"            ‘未提供第二个参
                        ’数。
   call listtext (strname)
end sub
在未提供某个可选参数时,实际上将该参数作为具有 empty 值的变体来赋值。上例说明如何用 ismissing 函数测试丢失的可选参数。
提供可选参数的缺省值
也可以给可选参数指定缺省值。在下例中,如果未将可选参数传递到函数过程,则返回一个缺省值。
sub listtext(x as string, optional y as _
integer = 12345)
   list1.additem x
   list1.additem y
end sub
private sub command1_click ()
   strname = "yourname"   ‘未提供第二个参
                     ’数。
   call listtext (strname)   ‘添加“yourname”和
                        ’“12345”。
end sub
使用不定数量的参数
一般说来,过程调用中的参数个数应等于过程说明的参数个数。可用 paramarray 关键字指明,过程将接受任意个数的参数。于是可以这样来编写计算总和的 sum 函数:
dim x as integer
dim y as integer
dim intsum as integer
sub sum (paramarray intnums ())
   for each x in intnums
      y = y + x
   next x
   intsum = y
end sub
private sub command1_click ()
   sum 1, 3, 5, 7, 8
   list1.additem intsum
end sub
用命名的参数创建简单语句
对许多内建函数、语句和方法,visual basic 提供了命名参数方法来快捷传递参数值。对命名参数,通过给命名参数赋值,就可按任意次序提供任意多参数。为此,键入命名参数,其后为冒号、等号和值 (myargument := "somevalue") ,可以按任意次序安排这些赋值,它们之间用逗号分开。注意,下例中的参数顺序和所要参数的顺序相反:
function listtext (strname as string, optional straddress as string)
   list1.additem strname
   list2.additem straddress
end sub
private sub command1_click ()
   listtext straddress:=”12345”, strname:="your name"
end sub
如果过程有若干不必总要指定的可选参数,则上述内容更为有用。
确定对命名参数的支持
要确定哪一个函数、语句和方法支持命名参数,用“代码”窗口中的“autoquickinfo”功能,检查“对象浏览器”,或者参阅语言参考。使用命名参数时要注意以下几点:
在 visual basic (vb) 对象库中的对象的方法不支持命名参数。而 visual basic for applications (vba) 对象库中的所有的语言关键字都支持命名的参数。

在语法中,命名参数是用粗体和斜体字表示的。所有其它参数只用斜体字表示。
重点 使用命名参数时不能省略所需参数的输入。可以只省略可选参数。对于 visual basic (vb) 和 visual basic for applications (vba) 对象库,“对象浏览器”对话框将可选参数用方括号 [ ] 括起来。
详细信息 请参阅语言参考中的 "byval"、"byref"、"optional" 和 "paramarray"。






    评论内容 (*必填):
    Ctrl + Enter 快速提交