Visual Basic 6.0中ByVal和ByRef的区别和应用示例!optional和缺省时的区别和应用示例!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Visual Basic 6.0中ByVal和ByRef的区别和应用示例!optional和缺省时的区别和应用示例!相关的知识,希望对你有一定的参考价值。

ByVal和ByRef的区别和应用示例!
optional的含义
optional和缺省时的区别和应用示例!

请举例说明他们的本质区别
我在线等,只要能让我明白的 我立刻给分

byref 是按地址传递参数,byval 是按值传递参数.
byref 传的变量可以在过程中修改,并能返回修改结果.

private i as long ,j as long

public sub test(byref vi as long ,byval vj as long)
debug.print "vi:" & vi
debug.print "vj:" & vj
vi=vi+1
vj=vj+1
debug.print "vi:" & vi
debug.print "vj:" & vj
end sub

public sub test2()
i=1
j=2
call test(i,j)
debug.print "i:" & i
debug.print "j:" & j

end sub

输出结果应该是:
vi:1
vj:2
vi:2
vj:3
i:2
j:2

向过程传递参数

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

参数的数据类型
过程的参数被缺省为具有 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"。
参考技术A ls好长……长话短说
ByRef传递引用(即地址值,或指针,随便怎么说),ByVal传递值
想象你需要阅读我的一本书,我把我的书给你就是ByRef,我再买一本送给你就是ByVal,ByRef传递后还是一本书,ByVal传递变成了两本一样的书
sub doit(by*** a&)
a=a+100
end sub

sub main
b=1
doit(b);
msgbox(b);
end sub

写ByRef的话弹出101,ByVal弹出1

Optional是可选的14,缺省就是默认值
function add&(a&,optional b&=100)
add=a+b
end function

sub main
msgbox(add(1,2)) '输出1+2=3
msgbox(add(1)) '输出1+100=101
end sub本回答被提问者采纳

text Visual Basic代码片段

vbase : writes a template's template
scaffold : writes a template's template

Vue VSCode Snippents
vif: v-if=""
von: @click="handler(arg, event)"
vdata: Creates a data object
vmethod: Creates a method object

以上是关于Visual Basic 6.0中ByVal和ByRef的区别和应用示例!optional和缺省时的区别和应用示例!的主要内容,如果未能解决你的问题,请参考以下文章

Visual Basic 6.0/8.0/9.0 编程需要哪些软件工具?

Visual Basic 6.0 和 VBA 的区别

如何在 Visual Basic 6.0 中创建带有文本框的数组

Visual Basic 6.0 ActiveReports打印对话框打印机按钮

如何使用Visual Basic 6.0将LPT1更改为LPT2?

如何在Visual Basic 6.0中使用主键在一个表中使用外键获取记录