如何:强制通过值传递参数 (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)

如何:更改过程参数的值 (Visual Basic)

如何:防止过程参数的值被更改 (Visual Basic)

概念

Visual Basic 中的过程

过程参数和变量 (Visual Basic)

通过值和通过引用传递参数 (Visual Basic)

可修改和不可修改参数之间的差异 (Visual Basic)

通过值传递参数和通过引用传递参数之间的差异 (Visual Basic)

按位置和名称传递参数 (Visual Basic)

值类型和引用类型