[トピック内 5 記事 (1 - 5 表示)] << 0 >>
■No85755 (吉岡 さん) に返信 > 凄く初歩的なことなんですが、変数の宣言はどこですることが良いのか?正しいのか? > ネットのサンプルソースなどを見ていると、ループの外と中で宣言しているものがあります。 > 違いがよくわからないのですが、ループの中で宣言すると、ループを抜けるまでずっと変数が溜まっていったりしますか? > > for (int i = 0; i <= 10000; i++) > { > i++; > string str = "yoshi"; > Console.WriteLine(str); > } こっちはここでstrが無効 > string str = ""; > for (int i = 0; i <= 10000; i++) > { > i++; > str = "yoshi"; > Console.WriteLine(str); > } こっちはここでstrが有効 です。
基本的には、みなさんが答えてくれている通りです。 なので、以下の件だけ答えてみます。 > 違いがよくわからないのですが、ループの中で宣言すると、 > ループを抜けるまでずっと変数が溜まっていったりしますか? 値型はスコープが切れたら自動開放されますが、 参照型はnewしたら、ガベージコレクトされるまで溜まり続けます。 それと同じかどうかという話ですよね? string型は参照型ですが、値型っぽい動作をします。 なので、どっちでしょう? でも、実際の文字列の領域は参照先に存在することからして、 ガベージコレクタ任せな気がします。 よって私の意見は、どっちも、 ガベージコレクタが走るまで溜まっているに一票。 もちろん、自信なし(笑)
管理者用
- Child Tree -