1

我想创建一个在 using() 语句中调用存储库类的方法。该类目前不是一次性的。在实现 IDisposable 之前我应该​​考虑什么?

IE

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.
}

正如您在第二个示例中看到的那样,该类实际上没有任何地方可以放置using声明来处置资源。由于它将一次性对象存储在一个字段中,并且它是负责处置它的人,因此确保它被处置的最佳方法是实现IDisposable.

于 2012-04-23T15:55:44.613 回答