代碼協定(四)——安裝和使用

前面已經介紹過,代碼協定相關函數是.Net 4.0的一部分,內置在在名字空間System.Diagnostics.Contracts中,都是一些靜態函數。可是,使用的時候咱們就會發現它們並無按照咱們預期的方式所工做,以下函數就能正常運行而不報異常。html

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

實際上,代碼協定的大部分功能是在連接的時候經過Code Contracts Dev來進行代碼注入纔有效果的,默認狀況下只有假定和斷言(我所測試過的)是有效果的。 函數

啓用代碼協定的功能步驟以下: 性能

首先,安裝Code Contracts for .NET插件。 測試

    

安裝了該插件後,咱們就能夠在項目的屬性頁上發現多了一個Code Contracts的標籤: ui

    

勾上"Perform Runtime Check"選項,只是能夠看到右側的下拉框有五個選項,這裏分別介紹一下它們的區別: spa

  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選項。 orm

另外,在安裝了Code Contracts for .NET插件後,它也順帶安裝了一些代碼片斷,方便咱們快速輸入,很是給力。例如Contract.Require函數能夠直接經過"cr"+Tab鍵輸入,Contract.Ensures能夠經過"ce"+Tab鍵輸入。 htm

    

    

另外,微軟還提供了一個Code Contracts Editor Extensions插件實現編輯器擴展,能夠顯示出函數的前置條件和後置條件,很是方便。這個插件我之前用過,不過在VS2013上使用過的時候老出錯,不知道爲何。感興趣的朋友能夠試一下。

    

相關文章
相關標籤/搜索