投稿者 魔界の仮面弁士  () 投稿日時 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 メソッドを 
再定義(オーバーライドもしくはシャドウイング)する必要は無いはずです。