1
我讀here不檢查對象終結器或實現Dispose方法的任何方法的不變量,但它沒有說明原因。我懷疑這是因爲在處理對象時不變的條件可能不再成立,因此可能會導致終結器或處置方法失敗。Contract.Ensures應該用於finalizer和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;
}
}
}