Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
デストラクタについて
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=2466#CommentId19604
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
魔界の仮面弁士
 ()
投稿日時
2008/7/15 20:04:00
>>5
> 将来の改造に備えて Dispose メソッドを実装しておきは空にしておき、
それは避けましょう。将来、使う「かもしれない」という理由だけで
空のメソッドを追加していったら、まとまりの無いクラスになってしまいます。
そのクラスが、「IDisosable を実装しないと、内部で利用している
オブジェクトを正しく破棄できない」事が分かっている場合のみ、
実装するようにしてください。
> 必ず Dispose メソッドがあるのでとりあえず呼んでもらう。
できれば、理由を把握した上で意図的に呼ぶようにしてください。
初めの内は「とりあえず呼ぶ」という覚え方でも良いですが、
それだけでは対処できないパターンも多々存在します。
たとえば、PictureBox1.CreateGraphics() で生成した Grapchis は、
責任を持って Dispose せねばなりませんが、Paint イベントの引数
e.Graphics で得た Grapchis は、Dispose してはなりません。
また、
Dim p1 As New Pen(Color.Red)
Dim p2 As Pen = Pens.Red
とあった場合、p1 は「Dispose しなければならない」のですが、
逆に p2 は「Dispose してはいけない」ものだったりします。
これは、Using ステートメントを使って破棄する場合も同様ですし
標準のクラスではなく、自作クラスであっても同じ状況になりえます。
> また、派生クラスで親クラスに Dispose メソッドが存在する場合は
> 子クラスの Dispose メソッドで MyBase.Dispose を実行する。
ここでいう「派生クラス」と「子クラス」は同じ物ですか?
それとも別物…たとえば「親=Form、派生=Form1、子=Controls」とか?
いずれにせよ、多くの場合、子クラスで Dispose メソッドを
再定義(オーバーライドもしくはシャドウイング)する必要は無いはずです。