该合同.确保在终结器和Dispose方法中使用
本文关键字:方法 Dispose 确保 合同 | 更新日期: 2023-09-27 18:16:18
我在这里读到不检查对象终结器或实现Dispose方法的任何方法的不变量,但它没有说明原因。我怀疑其原因是,当对象被处置时,不变条件可能不再成立,从而可能导致终结器或处置方法失败。
如果我的推理是正确的,这是否意味着我不应该在终结器和dispose方法(或任何代码契约)中使用Contract.Ensures()
?
我的具体例子是使用Contract.Ensures()
来确保在退出Dispose()
方法时IsDisposed
属性是true
。
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;
}
}
}
你可以而且应该在Dispose和finalizer方法中使用ensure。这些将应用于您的代码。不应用不变量,因为正如您所说,终结器/Dispose方法经常以不再满足对象不变量的方式使对象无效。