我在这里读到,不检查对象终结器或实现 Dispose 方法的任何方法的不变量,但它没有说明原因。我怀疑原因是当对象被释放时,不变的条件可能不再成立,从而可能使终结器或释放方法失败。
如果我的推理是正确的,这是否意味着我不应该Contract.Ensures()
在终结器和处置方法(或任何代码合同)中使用?
我的具体示例是Contract.Ensures()
用于确保IsDisposed
属性正在true
退出Dispose()
方法。
public class ExampleClass : IDisposable
{
public bool IsDisposed { get; set; }
~SomeClass()
{
Dispose(false);
}
public void Dispose()
{
Contract.Ensures(IsDisposed);
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
Contract.Ensures(IsDisposed);
if (!IsDisposed)
{
if (disposing)
{
// Other code here
}
IsDisposed = true;
}
}
}