2012-04-23 16 views
1

using()ステートメントでリポジトリクラスを呼び出すメソッドを作成したいと思います。そのクラスは現在、使い捨てではありません。 IDisposableを実装する前に考慮すべきことはありますか?IDisposableを実装する際に考慮するリスクはありますか?

すなわち

using(var repo = new RespositoryClass()) 
{ 
    //do work 
} 
+2

なぜIDisposableを実装する必要がありますか?使い捨てリソースを使用しているということは、 'IDisposable'を実装する必要はないということです。 – Servy

+0

@Servy:答えとして投稿してください。それは正しいものです! –

+0

あなたの質問はかなり広いようです。あなたが心配していることが分からない特定の原因は考えられませんが、あなたの開発に正しい光を当てる良い記事です。 http://www.codeproject.com/Articles/29534/IDisposable-What-Your-Mother-Never-Told-You-About – MilkyWayJoe

答えて

3

クラスがアンマネージリソースを使用する場合、または実装する他のメンバを初期化する場合は、IDisposableを実装する必要があります。それ以外の場合は、必要がない場合は使用しないでください。

+0

私の考えはまさに – Ropstah

+1

*にIDisposableを実装している/所有している/他のメンバーがいます。他の何かが責任を負う/使用している場合は、あなたが参照しているオブジェクトを破棄したくありません。 – roken

+0

@roken:良い点。それに応じて私の答えを修正。 –

2

あなたはクラス内IDisposableオブジェクトを使用するからといって、クラスはIDisposableインターを実装する必要があることを意味するものではありません。

下記のクラスは、IDisposableを実装する必要はありません。ここで

class NotDisposable 
{ 
    public void someMethod() 
    { 
    using(SomethingDisposable resource = new SomethingDisposable()) 
    {...} 
    } 
} 

IDisposableを実装する必要があろうと、クラスの一例です。あなたは、この第二の例で見ることができるように

class SomethingToDispose : IDisposable 
{ 
    private SomethingDisposable resource = new SomethingDisposable(); 

    public void someMethod() 
    { 
    //code that uses resource 
    } 

    //code to dispose of "resource" in a Dispose method. 
} 

クラスがリソースを処分するusing文を入れて、本当にどこにもありません。使い捨てオブジェクトをフィールドに格納しているので、それを廃棄する責任があるので、処分されることを確実にする最良の方法はIDisposableを実装することです。

+1

リポジトリクラス_does_は、 'using'ステートメントで呼び出されるため、使い捨てにする必要があります – Ropstah

+0

atbyrdは、Servyがこの回答を投稿した後に' using'を含むように質問を変更しました。 –

関連する問題