불 휘발성 개체가 개체 종료 자 또는 Dispose 메서드를 구현하는 메서드에 대해 확인되지 않았지만 이유를 설명하지 않은 것으로 here을 읽습니다. 그 이유는 객체가 처분 될 때 불변 조건이 더 이상 유지되지 않아 잠재적으로 finalizer를 만들거나 메서드를 처리하지 못할 수 있기 때문입니다.Contract.Ensure는 finalizer 및 Dispose 메서드에 사용해야합니까?
내 논리가 맞다면, finalizer에 Contract.Ensures()
을 사용하지 말고 해당 방법에 대한 코드 계약을 처분해야한다는 의미입니까?
내 구체적인 예로는 메서드를 종료 할 때 IsDisposed
속성이 true
인지 확인하기 위해 Contract.Ensures()
을 사용합니다.
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;
}
}
}