C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


■88122 / )  Re[1]: C#の配列コピーについて
□投稿者/ 魔界の仮面弁士 (1762回)-(2018/08/03(Fri) 12:02:06)
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 に変わった
返信 編集キー/


管理者用

- Child Tree -