-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

整数は型なので、'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

参照タイプ

この 2 番目の例では、'a' を 'b' に代入すると、'b' が 'a' が指す Data() の同じインスタンスへのREFERENCEになります。したがって、'a' または 'b' からの 'I' 変数への変更は、どちらも Data() の同じインスタンスを指しているため、両方に表示されます。

参照: 「値型と参照型」

于 2013-11-14T01:16:22.933 に答える