我在 vb.net 中有一个类定义为公共(public)类 A
类 A 在 Load 上创建,并在每个程序循环中调用一次
类 A 的构造函数包含参数(byref Value as long)
我有一个名为 varB 的全局变量,它在创建时传递给类 A。
现在为什么当 varB 在程序循环期间更改时,更改没有反射(reflect)在类中?
最佳答案
要是这么简单就好了... 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
所以如果你想要有值,你必须使用一个对象(定义新的类)
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 上的更改将得到反射(reflect),但不会反射(reflect) notification :使用 ClassTwo 中的公共(public)共享事件来通知/添加事件 ClassOne 中的处理程序以获取通知。
关于vb.net - 类不更新通过引用传递的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10464882/