質問: "333"; //リストに追加 SampleList.Add(sample); ``` とすれば、配列数は3つになりますが、データは3つとも最後に追加したデータになってしまいます。 なぜこのようになってしまうのか、それがわかりません。 どうして、このような事になってしまうのでしょうか?
回答: こんにちは。 C#のクラスは参照型ですので単純に代入した場合、単にそのアドレスが代入されるだけです。 Listのaddは代入と同じ動作をするようですので、単にsampleのアドレスがリストへ追加されるだけなのです。 従って、SampleList.add(sample);を3回実行した場合、sampleのアドレスを3つSampleListへ追加されます。つまり、全部同じインスタンスへの参照(ポインタ)が設定されます。 従って、SampleListの要素を全て表示した場合、最後にsampleに設定した値が常に表示されます。 MSDNのサンプル.aspx)のように、newしたものをadd()しましょう。それにより異なるdata_sampleのインスタンスが追加されます。 【余談ですが】 C#は、Javaと同じくポインタを意識しないで済む文法になっていますが、実装はポインタを使ってますので、ポインタを理解していないと今回のようなトラブルを解決することが厳しいです。