2012-05-05 57 views
2

我有定義爲公共的類在vb.net一個類的裝入創建一個類不更新變量傳遞的ByRef

類A,並得到每個程序循環調用一次

A類的構造包括參數(byref值只要)

我有一個名爲varB的全局變量,在創建時傳遞給A類。

現在爲什麼當varB在程序循環期間被更改時,更改不會反映在類中?

回答

2

如果只有這麼簡單...... ByRef只在你調用的子/函數內部工作,修改你發送的變量,並且在從該子/函數返回後不再做任何更改。

Public Class ClassOne 
    Public ValuefromClassOne As Integer 
    Public Sub ChangeAValue(ByRef AValue As Integer) 
     AValue = 12 ' This will modifiy the variable 
     ValuefromClassOne = AValue ' this will ONLY put 12 inside ValueFromClassOne 
    End Sub 
End Class 

Public Class ClassTwo 
    Public ValueFromClassTwo As Integer 
    Public Sub CallToClassOne() 
     ChangeAValue(ValueFromClassTwo) ' this will ONLY put 12 into ValueFromClassTwo 
     ValueFromClassTwo = 25 ' this will have effect only on ValueFromClassTwo - no link 
    End Sub 
End Class 

所以,如果你想擁有的價值,你必須使用一個對象(定義新的Class)

Public Class IntegerHolder 
    Public Property AnInteger As Integer 
End Class 

Public Class ClassOne 
    Public ValuefromClassOne As IntegerHolder 
    Public Sub ChangeAValue(ByVal AValue As IntegerHolder) 
     AValue.AnInteger = 12 ' This will modifiy the variable 
     ValueFromClassOne.AnInteger = AValue.AnInteger ' this will ONLY put 12 inside ValueFromClassOne 
     ' !!!!! BUT with this : !!!! 
     ValueFromClassOne = AValue 
     ' Now you hold a copy of the variable given in argument of ChangeAValue 
    End Sub 
End Class 

Public Class ClassTwo 
    Public ValueFromClassTwo As New IntegerHolder 
    Public Sub CallToClassOne() 
     ChangeAValue(ValueFromClassTwo) ' this will ONLY put 12 into ValueFromClassTwo 
     ValueFromClassTwo.AnInteger = 25 ' this will have effect on 
     ' ValueFromClassTwo AND ValuefromClassOne 
    End Sub 
End Class 

但是請注意,在ValueFromClassTwo的變化會反映,但不 通知:在ClassTwo中使用公共共享事件來通知/添加事件 ClassOne中的Handler以獲得通知。