Visual Basic 参数传送-形参与实参

在被调用过程中的参数是形参,出现在Sub过程和Function过程中。在过程被调用之前,形参并未被分配内存,只是说明形参的类型和在过程中的作用。形参列表中的各参数之间用逗号分隔,形参可以是变量名和数组名,但不能是定长字符串变量。

实参是在主调过程中的参数,在过程调用时实参将数据传递给形参。实参表可由常量、表达式、有效的变量名、数组名组成,实参表中各参数用逗号分隔。在调用过程时,实参被插入形参中的各变量处进行"形实结合",形实结合是按位置结合的,即第一个实参与第一个形参结合,第二个实参与第二个形参结合,依此类推。例如:

形参列表和实参列表中的对应变量名可以不同,但实参和形参的个数、顺序以及数据类型必须相符。所谓类型相符,对于变量参数就是类型相同,对于值参数则要求实际参数对形式参数赋值相容。

若在过程的形参表中列入了Optional关键字,则可以指定过程的形式参数为可选参数。如果某一参数为可选参数,则参数表中此参数后面的其他参数也必须是可选的,并要用Optional来声明。

例如,我们建立一个计算两个数据的乘积的过程,它能可选择地乘以第三个数。在调用时,既可以给它传递两个参数,也可给它传递3个参数。为了定义带可选参数的过程,必须在参数表中使用Optional关键字,并在过程体中通过IsMissing函数来测试调用时是否传递可选参数。过程代码为:

Sub Multi(fir As Integer, sec As Integer, Optional thir)

n = fir * sec

If Not IsMissing(thir) Then

n = n * thir

End If

Print n

End Sub

在调用上面的过程时,可以提供两个参数,也可提供3个参数,都能得到正确的结果。例如,如果用下述事件过程调用:

Private Sub Form_Click()

Multi 10, 20

End Sub

结果为200。如果用下述过程调用:

Private Sub Form_Click()

Multi 10, 20, 30

End Sub

结果为6000。

上述过程只有一个可选参数,也可以有两个或多个。但应注意,可选参数必须在参数的最后,且一般为Variant类型。另外,还可给可选参数指定缺省值,如Multi过程可改为:

Sub Multi(fir As Integer, sec As Integer, Optional thir As Integer = 30)

......

End Sub

一般来说,过程调用中的参数个数应等于过程说明的参数个数。如果使用ParamArray关键字,则过程可以接受任意个数的参数。例如,我们可以定义一个可变参数过程,用这个过程可以求任意多个数的乘积。

Sub Multi(ParamArray Numbers())

n = 1

For Each x In Numbers

n = n * x

Next x

Print n

End Sub

可以用任意个参数调用上述过程,如:

Private Sub Form_Click()

Multi 3, 4, 5, 6, 7

End Sub

输出结果为2520。

相关推荐
Scott9999HH3 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社4 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海4 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖5 小时前
JDK 26 新特性详解
java·开发语言
马优晨5 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区7 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大8 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai8 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜8 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa8 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio