WriteOnly属性ByRef

时间:2014-03-09 17:50:33

标签: vb.net properties byref

我不明白如何在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”这个论点。 有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

它只能在method'ss和constructor的签名中声明。它指定可以在被调用的方法中修改参数的基础变量。

在以下示例中,ByRef修饰符使名为“underlyingVariable”的字段获取新值。通过将值传递给Value,它将不会被修改,因此将为null:

Private underlyingVariable As Object

Public Sub New()
    MyMethod(underlyingVariable)
End Sub

Public Sub MyMethod(ByRef o As Object)
    o = New Object()
End Sub

答案 1 :(得分:0)

你不能通过引用来传递东西。它必须是ByVal。从VB.NET规范:

  

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

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

Form是引用类型(类),因此您希望按值传递它。否则,您将传递引用类型的引用。