Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 类不更新byref传递的变量_Vb.net_Variables_Byref - Fatal编程技术网

Vb.net 类不更新byref传递的变量

Vb.net 类不更新byref传递的变量,vb.net,variables,byref,Vb.net,Variables,Byref,我在vb.net中有一个类被定义为公共类a 类A在加载时创建,并在每个程序循环中调用一次 类A的构造函数包含参数(byref值为long) 我有一个名为varB的全局变量,它在创建时传递给类a 现在,为什么在程序循环期间更改varB时,更改不会反映在类中?如果这是如此简单的话。。。ByRef仅在您调用的子/函数内工作,以修改您“发送”的变量,从该子/函数返回后,不再进行任何更改 Public Class ClassOne Public ValuefromClassOne As Integ

我在vb.net中有一个类被定义为公共类a

类A在加载时创建,并在每个程序循环中调用一次

类A的构造函数包含参数(byref值为long)

我有一个名为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
因此,如果您想获得该值,则必须使用对象(定义新类)

但请注意,ValueFromClass2的更改将得到反映,但不会得到反映 通知:使用Class2中的公共共享事件通知/添加事件 处理程序,以获得通知

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