正确实施IDisposable

时间:2014-04-02 21:35:12

标签: c# idisposable

是否有必要保证自己不会使用处理过的课程?我只想在我的IDisposable类的所有方法中添加以下两行:

if (disposed)
    throw new InvalidOperationException("Attempt to use disposed object!");

这似乎不对。

2 个答案:

答案 0 :(得分:3)

我最好的答案取决于它。

一次性课程是否只在一个项目中使用?

  • 可能没有(虽然断言相同的效果可能并不坏)

这个课程是由你自己或小团队以外的人使用的吗?

  • 可能是的

访问被处置对象的副作用是什么?

  • 如果它会以其他方式抛出异常,上述将会影响你的生活 调试更容易,但最终结果在大多数情况下是相同的
  • 如果它能正常工作(即重新分配任何必要的资源等),那么谁真正关心
  • 如果它会导致未定义或不可预测的行为,那么就不会抛出异常然后定义,特别是如果你回答否,那么上述问题是肯定的

答案 1 :(得分:0)

我建议你所做的就是矫枉过正。我同意dkackman的说法,你应该像对那些可以无声地失败而不是为所有人失败的成员那样做。您可以像Form类那样执行并提供IsDisposed属性。如果他们不知道对象是否被处置,那么开发人员有责任自行检查。