Visual Basic:引用另一个变量的变量在原始变量更改时发生更改

时间:2013-11-13 23:56:47

标签: vb.net variables variable-assignment

示例:

Dim a As Integer = 1
Dim b As Integer = a
Console.WriteLine(b)
a = 0
Console.WriteLine(b)

输出:

1
0

由于某种原因,即使我实际上没有改变b,改变a也会改变b。为什么会发生这种情况,以及如何解决这个问题。

1 个答案:

答案 0 :(得分:4)

整数是类型,因此当您将“a”分配给“b”时,会生成 COPY 。对一个或另一个的进一步更改只会影响其自身变量中的特定副本:

Module Module1

    Sub Main()
        Dim a As Integer = 1
        Dim b As Integer = a

        Console.WriteLine("Initial State:")
        Console.WriteLine("a = " & a)
        Console.WriteLine("b = " & b)

        a = 0
        Console.WriteLine("After changing 'a':")
        Console.WriteLine("a = " & a)
        Console.WriteLine("b = " & b)

        Console.Write("Press Enter to Quit...")
        Console.ReadLine()
    End Sub

End Module

Value Type

如果我们谈论的是参考类型,那么这是一个不同的故事。

例如,Integer可能封装在Class中,而Classes是Reference类型:

Module Module1

    Public Class Data
        Public I As Integer
    End Class

    Sub Main()
        Dim a As New Data
        a.I = 1
        Dim b As Data = a

        Console.WriteLine("Initial State:")
        Console.WriteLine("a.I = " & a.I)
        Console.WriteLine("b.I = " & b.I)

        a.I = 0
        Console.WriteLine("After changing 'a.I':")
        Console.WriteLine("a.I = " & a.I)
        Console.WriteLine("b.I = " & b.I)

        Console.Write("Press Enter to Quit...")
        Console.ReadLine()
    End Sub

End Module

Reference Type

在第二个示例中,将'a'分配给'b'使'b'成为 REFERENCE 到'a'所指向的Data()的同一个实例。因此,两者都可以看到'a'或'b'中'I'变量的变化,因为它们都指向Data()的相同实例。

请参阅:"Value Types and Reference Types"