博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
后置条件和对象固定
阅读量:7051 次
发布时间:2019-06-28

本文共 1086 字,大约阅读时间需要 3 分钟。

后置条件
后置条件用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)

本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/500968,如需转载请自行联系原作者

你可能感兴趣的文章
【踩坑速记】MIUI系统BUG,调用系统相机拍照可能会带给你的一系列坑,将拍照适配方案进行到底!...
查看>>
linux source命令的用法
查看>>
微信小程序把玩(二十六)navigator组件
查看>>
Visual Studio 2017正式版发布全纪录
查看>>
1520-win10
查看>>
thinkjs——moment.js之前后台引入问题
查看>>
Java 线程内异常处理
查看>>
二:vlan,gre,vxlan
查看>>
静态内部类和非静态内部类的区别
查看>>
C语言 · 栅格打印问题
查看>>
【mysql】备份篇2:使用java程序定期备份mysql数据库
查看>>
BZOJ 4514: [Sdoi2016]数字配对 [费用流 数论]
查看>>
mysql中计算两个日期的时间差函数TIMESTAMPDIFF用法
查看>>
Tooltip浮动提示框效果(掌握里面的小知识)
查看>>
getline函数(精华版)
查看>>
myeclipse debug不显示变量值解决的方法
查看>>
Cygwin-Cygwin ssh Connection closed by ::1 出错
查看>>
SpringMVC工作原理
查看>>
【NLP】文本相似度
查看>>
python模拟Get请求保存网易歌曲的url
查看>>