-1

例子:

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

输出:

1
0

出于某种原因,即使我实际上并没有改变 b,改变 a 也会改变 b。为什么会发生这种情况,我该如何解决。

4

1 回答 1

4

Integer 是一种Value类型,因此当您将 '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

值类型

然而,如果我们谈论的是引用类型,那就是另一回事了。

例如,整数可能被封装在一个类中,而类是引用类型:

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

参考类型

在第二个示例中,将 'a' 分配给 'b' 会使 'b' 成为对 'a'指向的同一个 Data() 实例的引用。因此,两者都可以看到从“a”或“b”对“I”变量的更改,因为它们都指向同一个 Data() 实例。

请参阅:“值类型和引用类型”

于 2013-11-14T01:16:22.933 回答