实施IDisposable时要考虑的任何风险?

时间:2012-04-23 15:49:19

标签: c# winforms .net-3.5

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

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

2 个答案:

答案 0 :(得分:3)

如果类使用非托管资源,则应实现IDisposable,或初始化实现它的其他成员。否则,如果您不需要,请不要使用它。

答案 1 :(得分: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