2
我有定義爲公共的類在vb.net一個類的裝入創建一個類不更新變量傳遞的ByRef
類A,並得到每個程序循環調用一次
A類的構造包括參數(byref值只要)
我有一個名爲varB的全局變量,在創建時傳遞給A類。
現在爲什麼當varB在程序循環期間被更改時,更改不會反映在類中?
我有定義爲公共的類在vb.net一個類的裝入創建一個類不更新變量傳遞的ByRef
類A,並得到每個程序循環調用一次
A類的構造包括參數(byref值只要)
我有一個名爲varB的全局變量,在創建時傳遞給A類。
現在爲什麼當varB在程序循環期間被更改時,更改不會反映在類中?
如果只有這麼簡單...... 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以獲得通知。