1

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

すなわち

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

2 に答える 2

3

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

于 2012-04-23T15:57:28.717 に答える
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.
}

この 2 番目の例でわかるように、クラスがusingリソースを破棄するステートメントを配置する場所は実際にはありません。使い捨てオブジェクトをフィールドに格納していて、それを破棄する責任があるため、確実に破棄されるようにする最善の方法は、 を実装することIDisposableです。

于 2012-04-23T15:55:44.613 に答える