2010-05-23 3 views
1

아래 코드는 ccrewrite를 폭발시킵니다! 아이디어? 당신이 ActualClass을 주석 경우 은 BTW, ccrewrite 사전에 ...CodeContracts : 개체 참조가 개체 인스턴스로 설정되지 않은 상태에서 ccrewrite가 실패합니다.

[ContractClass(typeof(TestContracts))] 
    interface ITestInterface 
    { 
     bool IsStarted { get; set; } 
     void Begin(); 
    } 

    class ActualClass : ITestInterface 
    { 
     public bool IsStarted { get; set; } 
     public void Begin() 
     { 
      this.IsStarted = true; 
     } 
    } 

    [ContractClassFor(typeof(ITestInterface))] 
    class TestContracts : ITestInterface 
    { 
     ITestInterface Current { get; set; } 

     private TestContracts() 
     { 
      Current = this; 
     } 

     #region ITestInterface Members 

     bool ITestInterface.IsStarted 
     { 
      get; set; 
     } 

     void ITestInterface.Begin() 
     { 
      Contract.Requires(!Current.IsStarted); 
      Contract.Ensures(Current.IsStarted); 
     } 

감사 성공!

답변

1

글쎄, 존 소총은 충분히 읽을 권리 나 역할) 라이터가 계약을 소요하고 실제 수업을 박았 방법에 대한 비트를 ...

[ContractClassFor(typeof(ITestInterface))] 
    class TestContracts : ITestInterface 
    { 

     private TestContracts() 
     { 
     } 

     #region ITestInterface Members 

     bool ITestInterface.IsStarted 
     { 
      get; set; 
     } 

     void ITestInterface.Begin() 
     { 
      ITestInterface iface = this; 
      Contract.Requires(!iface.IsStarted); 
      Contract.Ensures(iface.IsStarted); 
     } 
    } 

http://social.msdn.microsoft.com/Forums/en-US/codecontracts/thread/853227bf-56e6-427b-8e9e-162c129e87ce/