所以根据这个http://msdn.microsoft.com/en-us/library/system.objectdisposedexception.aspxObjectDisposedException
是:应的ObjectDisposedException从属性被扔得到
时释放的对象上执行操作时引发的异常。
因此,由于属性获得不应该改变状态,它不是真的“执行操作”。那么应该抛出一个ObjectDisposedException
,然后有人访问设置在一个处置对象上的属性?
所以根据这个http://msdn.microsoft.com/en-us/library/system.objectdisposedexception.aspxObjectDisposedException
是:应的ObjectDisposedException从属性被扔得到
时释放的对象上执行操作时引发的异常。
因此,由于属性获得不应该改变状态,它不是真的“执行操作”。那么应该抛出一个ObjectDisposedException
,然后有人访问设置在一个处置对象上的属性?
在大多数情况下,处置对象的任何用法都是非法的。因此,投掷财产并不是不合理的。这就是说,这可能会导致额外的开销,这可能足以阻止JIT内联的内联,所以在实践中,如果getter会成功的话,可能不值得添加处置检查。如果属性getter会失败并抛出后抛出,那么我肯定会添加这个检查,所以这个异常将是有意义的,并且与该类型无关。
所以应抛出一个ObjectDisposedException然后有人访问一个处置对象的属性集?
我绝对认为投掷属性二传手是合适的,如果一个对象已被释放。
我会建议,如果一个对象在处置后使用并不是非常强有力,因为不会有这样的使用导致任何其他异常必须抛出ObjectDisposedException
。如果满足后者的要求,则要求物体确保在采取某种行动之前不予处置,否则在使用不当时丢弃ObjectDisposedException
可能基本上是“免费的”。另一方面,我不认为应该有必要在一个对象不需要关心它是否被处置的情况下携带一个Disposed
标志(例如Enumerable<T>.Empty.GetEnumerator()
应该能够返回一个单身枚举者实例,其MoveNext()
总是返回false
,而不考虑它是否已被处置)。
只有当你需要抛出时+1才会抛出,否则就是性能开销 –