VB编程基础教程13-向过程传递参数
- 爱奇艺限时半价 | 30+正版软件打折 | PD 虚拟机 7 折 | RackNerd 黑五 | 京东 Plus ¥69
向过程传递参数
过程中的代码通常需要某些关于程序状态的信息才能完成它的工作。信息包括在调用过程时传递到过程内的变量。当将变量传递到过程时,称变量为参数。
参数的数据类型
过程的参数被缺省为具有 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"。
/ 关注 “异次元软件世界” 微信公众号,获取最新软件推送 /
如本文“对您有用”,欢迎随意打赏异次元,让我们坚持创作!
赞赏一杯咖啡