トップ回答者
dispose

質問
-
VB2005Windowsアプリです。
Form_Loadに次のように記述したとき、なぜ例1はよくて例2が悪いのか、わかりません。
DataTableのクローンが渡されるのでしょうか?わたしがDisposeをよくわかってないかも。
よろしくお願いします。
'例1
Dim dt As New DataTabledt.TableName = "X"
dt.Columns.Add("A")
dt.Columns.Add("B")Dim dr As DataRow = dt.NewRow
dr.Item(0) = "AAA"
dr.Item(1) = "BBB"dt.Rows.Add(dr)
Me.DataGridView1.DataSource = dt
dt.Dispose()’ディスポーズ
'例2
Dim p As New PictureBox
p.Image = Image.FromFile("C:\test.jpg")Me.Panel1.Controls.Add(p)
p.Visible = Truep.Dispose()’ディスポーズ
回答
-
この辺りが参考になりそうです。
Disposeについて
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=21521
すべての返信
-
じゃんぬねっとさん、こんにちは。
じゃんぬねっと さんからの引用 これは、誰かからの課題でしょうか?
あ、いえいえ、私がここのMSDNフォーラムを徘徊していて、思った疑問です。(^^;
じゃんぬねっと さんからの引用 おっちい さんからの引用 Me.DataGridView1.DataSource = dt ここに注目しましょう。
参照型の基本についても確認しましょう。
この状態で、Dispose メソッドを呼び出すとどうなるかわかりますよね。う~ん。これって参照型ですよね?私の理解では、DisposeするとDatasourceも参照先がなくなって、と思ったのですが、この後、別のボタンクリックイベントなどで、Me.DataGridView1.DataSourceと参照してもNothingでないことが、私にはわからないんです。
参照型の説明してあるサイトは、よく、値型では代入したあと元を変えても代入先は変わらない、参照型では代入先も変わる、というような説明がしてありますが、それは理解してるつもりです。
わたしが何か勘違いしてますでしょうか?
もうちょっと調べてみます。
-
trapemiya さんからの引用 想像ですが、DataTableはDisposeで何もしてないんじゃないかと思います。ウインドウハンドルなんかの解放すべきリソースを持ってなさそうですし・・・
たしかに、DataTableって単なるデータの集合って感じで、開放すべきリソースはなさそうな気がします。で、Disposeで何もしてないとすると話は合うのですが、じゃぁ、なぜDisposableなのか?って疑問が。
このクラスは解放すべきリソースを持っているか、持っていないか、とか常に気をつけておかねばいけないのでしょうか?
で、それとは関係なくDisposeメソッドはあったりするってことでしょうか?
-
この辺りが参考になりそうです。
Disposeについて
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?forum=7&topic=21521