2013-05-31 2 views
1

불 휘발성 개체가 개체 종료 자 또는 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; 
     } 
    } 
} 

답변

1

폐기 및 마무리 자 방법에서 보장 할 수 있고 사용해야합니다. 이는 코드에 적용됩니다. 불변식이 적용되지 않습니다. 왜냐하면 finalizer/Dispose 메서드는 객체 불변 성을 더 이상 충족시키지 않는 방식으로 객체를 유효하지 않게 만듭니다.