成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解.NET 4.0代碼契約組件

開發 后端
.NET中的代碼契約組件是.NET平臺的重要補充,本文詳細介紹了.NET 4.0的代碼契約,并對契約種類和使用做了詳細講解。

代碼契約組件是對.NET的重要補充,這次我們將提供更為詳細的內容。

如果要在.NET 4.0發布之前使用代碼契約,我們可以在Visual Studio項目中引用程序集Microsoft.Contracts.dll,該程序集安裝在%PROGRAMFILES%/Microsoft/Contracts/PublicAssemblies目錄下。.NET 4.0會在mscorlib.dll中包含契約組件。我們可以指定契約驗證,可在編譯時(靜態)或在運行時(動態)執行校驗。

契約包含幾種類型:前置條件(Preconditions)、后置條件(Postconditions)、對象不變量(Object Invariants)、斷言(Assertions)、假定(Assumptions)、量詞(Quantifiers)、接口契約(Interface Contracts)和抽象方法契約(Abstract Method Contracts)。

前置條件使用Contract.Requires()進行定義,如果在編譯時使用了符號(Symbol)CONTRACTS_FULL或CONTRACTS_PRECONDITIONS,那么IL中就會包含其編譯結果。例如:

Contract.Requires( x ! = null );

如下所示,前置條件通常作為方法體中的參數驗證,如下所示:

public Rational( int numerator, int denominator) 
{    Contract.Requires( denominator ! = 0 );    
     this .numerator = numerator;    
     this .denominator = denominator;
}

如果不符合Contract.Requires()指定的條件,就會調用Debug.Assert(false),然后調用Environment.FailFast()。如果不管在編譯時使用哪個符號,您都希望程序集中包含前置條件,那么可以使用Contract.RequiresAlways()。

當方法結束時,后置條件表示其結果需要滿足的契約。它通過Contract.Ensures()方法指定,如下例所示:

public int Denominator {    
   get {        
         Contract.Ensures( Contract.Result() != 0 );   
         return this .denominator;    
       }
}

雖然似乎在返回結果之前就指定了條件,實際它還是會在返回結果之后,調用者得到結果之前進行驗證。

對象不變量則為每個實例指定條件。

ContractInvariantMethod]protected void ObjectInvariant () {    
Contract. Invariant ( this .denominator ! = 0 );
   }

至于其他類型的契約,斷言表示為Contract.Assert(),假定則表示為Contract.Assume()。一個失敗的Assert()會調用Debug.Assert(false)。假定與運行時斷言相似,不同之處在于靜態檢驗的方式。假定用于指定“期望”應該符合的條件,而由于某些限制,該條件無法得到編譯器的驗證。

接口契約為接口指定條件。它們使用在關聯于接口的獨立類上,因為接口方法只能聲明,而不能擁有方法體。對于抽象方法契約同樣如此。

以下為一個使用契約的類:

.NET契約類

.NET契約類代碼示例

【編輯推薦】

  1. 淺析.NET平臺編程語言的未來走向
  2. .Net平臺下的分布式緩存設計
  3. 淺析.NET類型轉換的四種方法
責任編輯:佚名 來源: InfoQ
相關推薦

2009-03-23 10:54:12

.NET契約式編程編程思想

2009-03-11 10:29:23

代碼契約.NETCLR

2009-07-24 10:00:38

.NET 4.0內存映

2009-12-30 10:21:36

.NET 4.0

2010-07-02 09:25:37

.NET 4.0可擴展

2009-12-18 09:38:27

.NET 4.0并行計

2009-12-28 10:04:59

.NET 4.0數組

2009-12-04 09:14:05

.NET 4.0

2024-02-21 08:07:10

業務json面板

2015-07-21 15:35:47

代碼總結源碼

2009-12-18 10:24:28

VS 2010代碼

2009-12-14 16:04:23

MyEclipse 6

2010-01-05 09:26:13

.NET 4.0

2009-12-15 13:39:43

2009-12-15 17:29:59

VS 2008代碼

2021-12-30 11:30:13

人工智能機器學習技術

2009-12-14 10:42:11

VS 2008代碼

2009-10-26 09:16:08

BigInteger類

2010-12-09 17:30:10

2020-06-05 14:48:11

零代碼低代碼開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人影院在线视频 | 亚洲一区精品在线 | 国产精品日日做人人爱 | 亚洲高清免费观看 | av网站观看 | 天天综合91 | 九一视频在线观看 | 亚洲视频免费在线观看 | 观看av| 日韩欧美国产精品一区二区 | 9999国产精品欧美久久久久久 | 成年人黄色一级毛片 | 成人特级毛片 | 色婷婷综合久久久中文字幕 | 欧美理伦片在线播放 | 国产精品网址 | 欧美日一区| 青青草原精品99久久精品66 | 亚洲成人日韩 | 国产黄色一级片 | 一区二区三区四区不卡视频 | 午夜99| 一区二区三区在线观看视频 | 日本午夜精品一区二区三区 | 91一区二区| 久久99视频 | 精品久久久久久亚洲国产800 | 福利一区二区在线 | www久久爱| 亚洲欧美网站 | 欧美一区视频 | 欧美视频免费在线 | 成人一区二区三区在线 | 天堂视频免费 | 成人在线观看免费 | 精品视频在线观看 | 中文字幕综合 | 亚洲成人自拍 | 天堂一区| 中文字幕亚洲免费 | 日本不卡一区二区三区 |