zoukankan      html  css  js  c++  java
  • 代码协定(四)——安装和使用

    前面已经介绍过,代码协定相关函数是.Net 4.0的一部分,内置在在名字空间System.Diagnostics.Contracts中,都是一些静态函数。但是,使用的时候我们就会发现它们并没有按照我们预期的方式所工作,如下函数就能正常运行而不报异常。

        static void Main(string[] args)
        {
            Contract.Requires(false);
        }

    实际上,代码协定的大部分功能是在链接的时候通过Code Contracts Dev来进行代码注入才有效果的,默认情况下只有假定和断言(我所测试过的)是有效果的。

    启用代码协定的功能步骤如下:

    首先,安装Code Contracts for .NET插件。

        

    安装了该插件后,我们就可以在项目的属性页上发现多了一个Code Contracts的标签:

        

    勾上"Perform Runtime Check"选项,只是可以看到右侧的下拉框有五个选项,这里分别介绍一下它们的区别:

    1. Full表示执行所有的代码协定语句。
    2. Pre and Post表示执行前置和后置条件检查,即Contract.Require和Contract.Ensures。
    3. Preconditions 表示只执行前置条件检查,即Contract.Require。
    4. ReleaseRequires 表示执行public类的public方法的前置条件检查。
    5. None表示不执行代码协定检查,即不进行代码协定注入。

    之所以有这些选项,是因为代码协定的代码注入运行时候是有开销的,影响运行性能。另外,链接的时候注入代码也是影响程序的生成时间的。我们可以在需要检验功能的时候放开代码检查,需要性能的时候关闭检查,非常方便,而传统的手动抛异常的方式就做不到这一点。

    值得一提的是,它是可以在Debug版本和Release版本中选择不同的开关的。我们在Debug版本中开启必要的代码检查,而在Release版本中关闭检查。需要注意的是,public类的public方法的入参检查(前置条件协定)是有必要的,即使在Release版本中也也应该存在。我的个人建议是在Debug版本中平时使用Pre and Post选项(注入代码也是影响程序的生成时间的,故只在有必要的时候才使用Full的方式),在Release版本中使用ReleaseRequires选项。

    另外,在安装了Code Contracts for .NET插件后,它也顺带安装了一些代码片段,方便我们快速输入,非常给力。例如Contract.Require函数可以直接通过"cr"+Tab键输入,Contract.Ensures可以通过"ce"+Tab键输入。

        

        

    另外,微软还提供了一个Code Contracts Editor Extensions插件实现编辑器扩展,可以显示出函数的前置条件和后置条件,非常方便。这个插件我以前用过,不过在VS2013上使用过的时候老出错,不知道为什么。感兴趣的朋友可以试一下。

        

  • 相关阅读:
    (转载)高速ADC的关键指标:量化误差、offset/gain error、DNL、INL、ENOB、分辨率、RMS、SFDR、THD、SINAD、dBFS、TWO-TONE IMD
    ADC相关参数之---分辨率和精度
    ADC相关参数之---INL和DNL
    MySQL中tinytext、text、mediumtext和longtext详解
    mysql升级5.5
    [mysql] mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in
    [mysql]ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
    MySql:charset和collation的设置
    shell 下执行mysql 命令
    MySql表结构修改详解
  • 原文地址:https://www.cnblogs.com/TianFang/p/3485005.html
Copyright © 2011-2022 走看看