如何:强制通过值传递参数 (Visual Basic)
过程声明确定传递机制。 如果形参声明 ByRef (Visual Basic)为, Visual Basic 所需引用传递对应的实参。 这使得过程能够更改调用代码中该编程元素的值参数。 如果希望保护基础元素避免这种更改,可以重写传入的 ByRef framework 通过用括号将参数名称过程调用。 这些括号是除了包括实参列表的括号之外调用。
调用代码无法重写机制。 ByVal (Visual Basic)
强制通过值传递实参
如果对应的形参声明一个程序的 ByVal ,则无需执行任何其他步骤。 Visual Basic 已经预期通过值传递实参
如果对应的形参声明一个程序的 ByRef ,请将实参包括在括号内在过程调用。
示例
下面的示例重写 ByRef 参数声明。 在强制 ByVal的调用,请注意括号的两个级别。
Sub setNewString(ByRef inString As String)
inString = "This is a new value for the inString argument."
MsgBox(inString)
End Sub
Dim str As String = "Cannot be replaced if passed ByVal"
' The following call passes str ByVal even though it is declared ByRef.
Call setNewString((str))
' The parentheses around str protect it from change.
MsgBox(str)
' The following call allows str to be passed ByRef as declared.
Call setNewString(str)
' Variable str is not protected from change.
MsgBox(str)
当 str 的对齐中的额外括号将参数列表, setNewString 程序不能在调用代码中更改它的值,并且, MsgBox 显示 “不能替换,如果传入的 ByVal”。 当 str 在额外括号中时没有包含,过程可以更改此值,并且, MsgBox 显示 “这是 inString 参数的一个新值”。
编译代码
当通过引用传递变量时,必须使用 ByRef 关键字指定此机制。
在 Visual Basic 的默认值是通过值传递实参。 但是,好的编程习惯。声明每个 ByVal (Visual Basic) 形参或 ByRef (Visual Basic) 关键字。 这将使您的代码更容易阅读。
可靠编程
如果过程声明参数 ByRef (Visual Basic),代码的正确执行可能依赖于能够更改调用代码中的基础元素。 如果调用代码通过将实参括在括号内重写此调用机制,或者,如果它通过不可更改参数,则过程不能更改基础元素。 这可能会在调用代码中产生意外的结果。
安全性
始终有允许程序的一个风险能够更改调用代码中作为实参基础的值。 请确保您希望此值更改为和准备签出对使用。
请参见
任务
概念
可修改和不可修改参数之间的差异 (Visual Basic)