vb.net - 类不更新通过引用传递的变量

标签 vb.net variables byref

我在 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/

相关文章:

vb.net - vb.net计时器和异常(尝试…捕获)和内存泄漏

vb.net - 无法查看声明为可为空的结构的成员

c++ - 我在滥用 `const` 吗?

vb.net - 'ByRef' 参数 '<parametername>' 不能在 lambda 表达式中使用

PHP 5 : return by ref method produces unexpected results

c# - 通过 Ref Textbox.Text

c# - 什么是 C# 中带有事件和句柄的 visual basic 的等价物

VB.NET - 类中的扩展函数?

linux - 如何列出$PATH?

c - 在 C 代码中显示全局变量的依赖关系