代码之家  ›  专栏  ›  技术社区  ›  Vyas Bharghava

codecontracts:ccrewrite失败,对象引用未设置为对象的实例

  •  1
  • Vyas Bharghava  · 技术社区  · 15 年前

    下面的代码使ccrewrite爆炸!思想? 顺便说一句,如果您注释掉实际类,那么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 回复  |  直到 15 年前
        1
  •  1
  •   Vyas Bharghava    15 年前

    好吧,我没能很好地读懂乔恩·斯基特;)关于重写器如何接受合同并将其放入实际的类中的一点……

       [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/

    推荐文章