【问题标题】:WriteOnly Property ByRef只写属性 ByRef
【发布时间】:2014-03-09 17:50:32
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: vb.net properties byref


    【解决方案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
    

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2016-04-28
        • 2023-03-27
        • 2017-04-12
        • 2011-05-15
        • 2011-07-20
        • 2013-01-25
        • 2010-12-02
        • 1970-01-01
        • 2011-01-13
        相关资源
        最近更新 更多