从函数内部的byref传递函数参数修改类属性

时间:2014-06-19 18:59:14

标签: vb.net class pass-by-reference

我理解手头的问题,但我正在寻找推荐的解决方法。

我有一个包含get / set属性的类,当使用特定值调用set时,它将执行一些操作。

Public Class A
  Private _bFlag As Boolean

  Public Property bFlag() As Boolean
     Get
        Return _bFlag
     End Get
     Set(value As Boolean)
        _bFlag = value
        If (value) Then
           ...do something...
        End If
     End Set
  End Property

End Class

当我将类变量作为ByRef传递给本地例程时,直到函数完成后才会触发Set属性。但我在切换标志的地方执行了一些瞬态操作。我想立即通知变量切换。

...
Dim myClassA as New A
...
<------Here the bFlag is False
Func1(myClassA.bFlag)
<------Here the bFlag is False since Func1 completed with the bFlag set as False
<------ the Set was never called since the variable never changed at this level

Public Sub Func1(ByRef flag as Boolean)
   ... start some action
   flag = True
   ... stop some action
   flag = False
End Sub

我理解这是此link的预期操作,其中包含示例:

Sub CopyBackByRef_Explained()
    Dim v1 = New C1
    Dim vbTemp = v1.P1
    FunctionWithInt(vbTemp)
    v1.P1 = vbTemp
End Sub

其中通过引用传递的变量首先成为临时副本以传递函数。

我怎样才能这样做,以便我可以立即通知ByRef传递的变量的变化?

1 个答案:

答案 0 :(得分:1)

我认为你可以将属性作为lambda表达式传递并使用反射来调用setter,但是将lambter中的setter调用包装起来并将其传递给它可能更容易:

Func1(Sub(value) myClassA.bFlag = value)

Public Sub Func1(flag As Action(Of Boolean))
    ' start some action
    flag(True)
    ' stop some action
    flag(False)
End Sub