|
2018/08/03(Fri) 12:09:03 編集(投稿者)
■No88108 (kasumi さん) に返信 > int[] A = { 1, 2, 3 }; 代入式の右辺は、「{1, 2, 3} という int[] 型インスタンス」を作成しています。 それを左辺の、「int[]」型の変数 A から参照させています。
> int[] B = { 1, 2, 3, 4, 5 }; 代入式の右辺は、「{1, 2, 3, 4, 5} という int[] 型インスタンス」を作成しています。 それを左辺の、「int[]」型の変数 B から参照させています。
> A = B; 右辺 B は、「{1, 2, 3, 4, 5} という int[] 型インスタンス」を指しており、 それを左辺の A に代入しています。
それ以前に保持していた {1, 2, 3} への参照は、この時点で失われ、 変数 A が参照しているインスタンスは、B が参照しているインスタンスと 同一のオブジェクトとなります。(データのコピーではなく、参照のコピー)
参照のコピーではなく、データのコピーが目的なら、 Clone メソッドや Array.Copy メソッドを使います。
> VisualStudio 2017 でC#を書いている者です。 2017 なら、こういう記述もあったりして。
int[] A = { 1, 2, 3 }; int[] B = { 1, 2, 3, 4, 5 }; ref int[] C = ref A; Console.WriteLine(A.Length); // まだ 3 Console.WriteLine(B.Length); // まだ 5 Console.WriteLine(C.Length); // まだ 3 A = B; Console.WriteLine(A.Length); // 5 に変わった Console.WriteLine(B.Length); // 5 のまま Console.WriteLine(C.Length); // 5 に変わった
|