后置条件和对象固定

 

后置条件
后置条件用Contract.Ensures()方法判断,是在方法结束后作验证。如果本方法对方法参数作验证,只对参数的传入时的值进行验证,所以本方法一般情况下是对类中的字段作验证。
对于异常处理,有一个Contract.EnsuresOnThrow()方法,这个方法是当代码抛出异常时,并且不后置条件为false时触发。
在方法的内部,可以用Contract.Result<T>来得到本方法的返回值,T是返回值类型,如果方法返回值是void,则不能使用Contract.Result方法,举例如下:
public double SetAge(int age)
        {
            Contract.Ensures(Contract.Result<double>() > 10.0);          
            return 10.0;
        }
Contract.OldValue(字段),在方法内能访问到的参数和字段都可以用这个方法取到初始值。但有一些情况例外:
1、 如果一个引有类型没有被初始化,代码如下:
string s;
        public double SetAge(int age, bool bol)
        {        
            Console.WriteLine(Contract.OldValue(s.Length ));         
            return 0;
        }
2、 因为out参数没有值,不能在Contract.OldValue()方法中得到出参的
如果方法有out参数,可以用Contract.valueAtReturn,来作后置条件。
  public void SetAge(out int abc)
        {
            Contract.Ensures(Contract.ValueAtReturn(out abc)<150&&Contract.ValueAtReturn(out abc)>0);
            abc = 30;    
        }
对象固定
对象固定,就是为了对象业务逻辑的完整性,合用下面方法对对象内部的字段作有效性验证。本例验证在对象被实例化时,age字段的取值范围。
[ ContractInvariantMethod]
        void ObjectValidate()
        {
            Contract.Invariant(this.age > 0 && this.age < 150);
        }

这个方面是的协定在方法体里验证,并且本方法是私用,并且加Contractinvariantmehtod的属性(Attribute)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值