none
disposeについて RRS feed

  • 質問

  •  

    Dispose()メソッドは、アンマネージなリソース(ファイルオープンやDBとの接続)を開放するメソッドであること。

    と、理解しているのですが。

     

    例えば、string型のメンバ変数のみで構成されたデータクラス(ClassData1)に

    IDisposableインターフェースを継承させてDispose()メソッドを

    実装させたとします。

     

    他のクラスで上記のデータクラス(ClassData1)のインスタンスを

    生成して使用し、

    使用後、Dispose()メソッドを実行する。

    このDispose()メソッドを実行する意味はありますか?

     

    私の理解だと、データクラス(ClassData1)は

    string型のメンバ変数のみで、アンマネージなリソースは

    使用していないため

    不要なDispose()と思うのですが、いかかでしょうか?

    アンマネージなリソースの理解が間違っていますか?

    お願いします。

    2008年2月6日 1:00

回答

  • 意味があるかどうかは Dispose の実装次第でしょう。なにも実装が無ければ呼び出す意味はありませんし何らかの実装があればその実装なりの意味があります。

    一般にクラスの利用者はそのクラスがアンマネージドリソースを使用しているかどうか知る術はありません(まあ実際には大抵ドキュメンテーションされてるでしょうけど)。そのクラスに IDispose が実装されてれば黙って Dispose を呼び出すでしょう。その Dispose がどんな実装をされているか知ったことではありません。

    2008年2月6日 1:10

すべての返信

  • 意味があるかどうかは Dispose の実装次第でしょう。なにも実装が無ければ呼び出す意味はありませんし何らかの実装があればその実装なりの意味があります。

    一般にクラスの利用者はそのクラスがアンマネージドリソースを使用しているかどうか知る術はありません(まあ実際には大抵ドキュメンテーションされてるでしょうけど)。そのクラスに IDispose が実装されてれば黙って Dispose を呼び出すでしょう。その Dispose がどんな実装をされているか知ったことではありません。

    2008年2月6日 1:10
  • 追加質問です。

    アンマネージなリソースはDisposeで開放されますが

    ナネージリソースはガベージコレクションによって処理されるまでは

    開放されないと考えてよろしいですか?

    2008年2月6日 3:18
  •  

    追加質問です。

    アンマネージなリソースはDisposeで開放されますが

    ナネージリソースはガベージコレクションによって処理されるまでは

    開放されないと考えてよろしいですか?

    2008年2月6日 3:31
  • 追加質問です。

    アンマネージなリソースはDisposeで開放されますが

    マネージリソースはガベージコレクションによって処理されるまでは

    開放されないと考えてよろしいですか?

     

    2008年2月6日 3:51
  • 追加質問です。

    アンマネージなリソースはDisposeで開放されますが

    マネージリソースはガベージコレクションによって処理されるまでは

    開放されないと考えてよろしいですか?

    2008年2月6日 5:31