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

わんくま同盟

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

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


(過去ログ 136 を表示中)
■79950 / )  Re[1]: クラスのList
□投稿者/ とっちゃん (365回)-(2016/05/30(Mon) 19:15:26)
No79948 (mh001 さん) に返信
> 初めて質問させていただきます。
>
> さて、このようなクラスがあるとき、
>
> public class test
> {
> public string name;
> }
>
> 以下のイベントを発生させます。
>
> //---------------------------------------------------------------
> private void button1_Click(object sender, EventArgs e)
> {
> test t = new test();
> List<test> temp = new List<test>();
>
> //-------------------
> t.name = "あ";
>
> temp.Add(t);//
> MessageBox.Show(temp[0].name);//①
>
> //-------------------
> t.name = "い";
>
> temp.Add(t);
> MessageBox.Show(temp[1].name);//②
>
> for (int i = 0; i < temp.Count;i++ ) {
> MessageBox.Show(temp[i].name);//③
> }
> }
>
> //---------------------------------------------------------------
> その結果がこうなりました。
> ①の出力は「あ」
> ②の出力は「い」
> ③の出力は「い」「い」
>
> ③の出力が「あ」「い」となるものと考えていたのですが、
> うまくいきませんでした。
> 勘違いしているでおろう部分をご指摘いただければ幸いです。

List<test> に入るオブジェクトは、参照オブジェクトです。
tが同じまま(中身は変わっていますが)2回セットするので、最後に変更した内容が
全部に反映されています。

1,2で違うものにしたいときは、
1回目の temp.Add(t); の後に
t = new test();
ともう一度行うことで、2回目に追加する t が別のものになります。

より詳しくは、入門書の類を読んでみてください。

返信 編集キー/


管理者用

- Child Tree -