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

わんくま同盟

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

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


(過去ログ 136 を表示中)
■79952 / )  Re[2]: クラスのList
□投稿者/ mh001 (2回)-(2016/05/30(Mon) 19:38:50)
2016/05/30(Mon) 19:40:17 編集(投稿者)

No79950 (とっちゃん さん) に返信
> ■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);//A
>>
>> for (int i = 0; i < temp.Count;i++ ) {
>> MessageBox.Show(temp[i].name);//B
>> }
>> }
>>
>>//---------------------------------------------------------------
>>その結果がこうなりました。
>>@の出力は「あ」
>>Aの出力は「い」
>>Bの出力は「い」「い」
>>
>>Bの出力が「あ」「い」となるものと考えていたのですが、
>>うまくいきませんでした。
>>勘違いしているでおろう部分をご指摘いただければ幸いです。
>
> List<test> に入るオブジェクトは、参照オブジェクトです。
> tが同じまま(中身は変わっていますが)2回セットするので、最後に変更した内容が
> 全部に反映されています。
>
> 1,2で違うものにしたいときは、
> 1回目の temp.Add(t); の後に
> t = new test();
> ともう一度行うことで、2回目に追加する t が別のものになります。
>
> より詳しくは、入門書の類を読んでみてください。
>

早速ご回答頂きありがとうございます。

t = new test();
を挿入することにより、希望どおりの結果を得ることができました。

参照オブジェクトをキーワードに、今一度勉強しようと思います。

ご指摘ありがとうございました。

返信 編集キー/


管理者用

- Child Tree -