- PR -

クラスで使用するオブジェクトのDispose の実行タイミング

1
投稿者投稿内容
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-13 20:55
今更な質問で申し訳ないのですが・・・

自作したクラス内部で、Dispose を実行するクラスからオブジェクトを作成した際
に、どのように Dispose() を実行すれば良いのかを教えて下さい。

コード:
public class 食事クラス () {
    private 大食いクラス 大食い;

    public 食事クラス() {
        大食い = new 大食いクラス();  // ここで生成
    }

    public void 食わせる(object 値) {
        大食い.食う(値);
    }

      : 
}



System.Windows.Form から派生したクラスでは、System.Windows.Form の Dispose()
をオーバーライドして、components を Dispose しているみたいですが、上記のよう
なクラスの場合、どのように「大食い」を Dispose すれば良いのでしょうか?
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-05-13 21:31
そりゃ、食事クラスが大食いインスタンスを必要としなくなったときでしょう。
もしいつ必要としなくなるのか判断できないのなら、大食いクラスのファイナライザに任せるしかないでしょう。つまり、放置ですね。
食事クラスを IDisposable にして Dispose() で大食いの Dispose() を呼び出すようにすれば、食事クラスの利用者がオブジェクトの無効を判断してくれるかも知れません。もちろん、その食事クラスの利用者が Dispose を呼び出さなかったら、大食いオブジェクトはファイナライザで自分のアンマネージドリソースを片づけるでしょう。
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2006-05-13 22:56
引用:

Hongliangさんの書き込み (2006-05-13 21:31) より:

そりゃ、食事クラスが大食いインスタンスを必要としなくなったときでしょう。



僕は何か勘違いしていたみたいです(_*_;)

てっきり、自分が開放される時点でイベントなりが発生して、そのタイミングで開放
するものだとばかり思っていました。
大食いオブジェクトは必要だから Dispose メソッドを実装しているわけで、これを
使用している食事クラスも必要だから Dispose メソッドを実装すればよいと言うこ
とですね。確かに言われてみれば、その通りでした。

Hongliangさんありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)