52

在实现 IDisposable 时,我理解在对象被释放后不应该调用的每个方法都应该抛出ObjectDisposedException. 但是应该传递给异常构造函数的名称对象的标准是什么?

4

3 回答 3

52

我相信推荐的做法是抛出以下内容:

throw new ObjectDisposedException(GetType().FullName);

或者包括检查,需要它的每个方法顶部的这两行代码(显然不是Dispose方法本身):

if (this.disposed)
    throw new ObjectDisposedException(GetType().FullName);

甚至可能有助于将其重构为一种用于可用性的微小方法。

于 2009-12-26T22:25:58.983 回答
14

甚至 .NET Framework 本身在这里也不是很一致。

David M. Kean(Microsoft FxCop 团队的前开发人员)在MSDN 文档中为 ObjectDisposedException添加了评论:

这种类型的典型用法如下所示:

[C#]
private void CheckDisposed()
{
    throw new ObjectDisposedException(GetType().FullName);
}
于 2009-12-26T22:26:57.673 回答
1

我不相信有一个标准,我会返回对象的类型以及唯一标识字段的字符串内容(排序的“主键”)。

于 2009-12-26T22:12:23.087 回答