0

实施该Dispose方法的规则之一是:

当资源已经被释放时ObjectDisposedException,在这种类型(除了)上抛出一个from 实例方法。Dispose此规则不适用于该Dispose方法,因为它应该可以多次调用而不会引发异常。

请参阅:http: //msdn.microsoft.com/en-us/library/b1yfkh5e.aspx

这是否意味着如果我想正确实现属性,就不能使用自动实现的属性?我需要像这样实现它的属性吗?

private bool _property; 
public bool Property
{
    get
    {
       if(disposed) throw new ObjectDisposedException("MyClass");
       return _property;
    }
    set
    {
       if(disposed) throw new ObjectDisposedException("MyClass");
       _property=value;
    }
}
4

2 回答 2

2

通常,属性应该像字段一样(很少或没有计算,如果没有其他状态发生变化,则在多次调用中返回相同的值),因此它们不需要完整的处置检查,但您应该检查定义的公共方法在您的班级。

于 2010-02-10T10:38:38.363 回答
1

这取决于。调用已处置的对象是一种边缘条件,因此您通常不希望通过添加所有这些测试来在常规使用期间牺牲对象的效率。阅读规则的正确方法是:

如果在 Disposed 上调用已处置的方法会导致异常或产生不良后果,则抛出 ObjectDisposedException

例如,如果您的类的 Dispose 方法将某个字段设置为 null,您应该ObjectDisposedException使用该字段从方法/属性中抛出一个,而不是使用NullReferenceException.

于 2011-04-11T23:12:13.677 回答