0

我不明白如何在 VB.NET 中传递参数 byref。

我试过这个:

Private m_Form As frmMain

Public WriteOnly Property MyForm() As Form

    Set(ByRef value As Form)
        m_Form = value
    End Set

End Property

但是 VB.NET 不喜欢“Byref”参数。有人可以帮忙吗?

谢谢!

4

2 回答 2

1

ByRef 修饰符不能在属性设置器中使用。

它只能在方法和构造函数的签名中声明。在那里它指定参数的底层变量可以在被调用的方法中修改。

在以下示例中,ByRef 修饰符导致名为“underlyingVariable”的字段采用新值。通过按值传递变量,它不会被修改,因此将为空:

Private underlyingVariable As Object

Public Sub New()
    MyMethod(underlyingVariable)
End Sub

Public Sub MyMethod(ByRef o As Object)
    o = New Object()
End Sub
于 2014-03-09T18:14:54.950 回答
0

您不能使用 setter 通过引用传递事物。一定是ByVal。来自 VB.NET 规范:

§9.7.2 如果一个参数列表被指定,它必须有一个成员,该成员不能有除 ByVal 之外的修饰符,并且它的类型必须与属性的类型相同。

我认为在属性设置器中使用 ByRef 并不特别有意义。使用 ByRef 意味着您可能想要更改调用 setter 的引用。

Form是引用类型(类),所以要按值传递。否则,您将传递引用类型的引用。

于 2014-03-09T17:55:15.140 回答