-
vb.net教程之如何向过程传递参数
如何向过程传递参数
过程中的代码通常需要某些关于程序状态的信息才能完成它的工作。信息包括在调用过程时传递到过程内的变量。当将变量传递到过程时,称变量为参数。
1.参数的数据类型
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")
过程中的代码通常需要某些关于程序状态的信息才能完成它的工作。信息包括在调用过程时传递到过程内的变量。当将变量传递到过程时,称变量为参数。
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")
栏目列表
最新更新
python爬虫及其可视化
使用python爬取豆瓣电影短评评论内容
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比