自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

探秘CLR 4.0中的代碼契約

開發(fā)
代碼契約來自于微軟的研究項目TEAM, 理念是”契約式設(shè)計”. CLR4.0提供的代碼契約機制可以保證調(diào)用者遵守這些調(diào)用規(guī)則, 編譯時有編譯器進行檢查, 運行時有CLR來檢查.

代碼契約來自于微軟的研究項目TEAM, 理念是”契約式設(shè)計”. 過去我們寫一些方法, 在每一個方法前面加上說明文字, 告訴調(diào)用者這些方法的參數(shù)有什么要求. 但是這樣做有一個缺點, 就是這樣不能使調(diào)用者必須遵守調(diào)用要求. CLR4.0提供的代碼契約機制可以保證調(diào)用者遵守這些調(diào)用規(guī)則, 編譯時有編譯器進行檢查, 運行時有CLR來檢查. 它類似于c++的斷言機制. 但比c++的更豐富.

所有的代碼契約都在 System.Diagnostics.Contracts.CodeContract靜態(tài)類中定義. 來看幾個常用的:

方法體剛進入時用:
CodeContract.Requires(x>= 0);  明眼人一看就懂,  它受編譯開關(guān)的影響, 比如你可以只在調(diào)試模式下使用此代碼契約.

CodeContract.RequiresAlways(x>= 0); 基本和上面這個一樣, 唯一區(qū)別它不受編譯開關(guān)的影響,即不管是Debug還是Release模式都要包括這個代碼契約.

方法體退出時用(這些須寫在方法體的開始處):

// 方法體關(guān)閉時必須為真 must be true if method closes successfully 
CodeContract.Ensures(z != null);
// 確保發(fā)生異常時某些變量的狀態(tài) Grantuee some variable status in
CodeContract.EnsuresOnThrow(z != null);case of specific exceptions.

對象不變量

對象不變量確保所有公共方法返回時某些條件必須滿足. 對象不變量定義在一個單獨的方法內(nèi), 此方法要有[ContractInvariantMethod]做標注. 方法名無所謂, 但是方法必須返回void, 并且沒有參數(shù), 方法體內(nèi)可以有多個CodeContract.Invariant語句, 如:

[ContractInvariantMethod]
  void ObjectInvariant() { 
   CodeContract.Invariant(someData >= 0);
 }

【編輯推薦】

  1. 詳解.NET 4.0代碼契約組件
  2. 在CLR之上的構(gòu)建領(lǐng)域特定語言
  3. Visual Studio中的SQL Server CLR代碼調(diào)試
責任編輯:book05 來源: cnblog
相關(guān)推薦

2009-03-04 09:52:35

代碼契約組件接口

2009-03-23 10:54:12

.NET契約式編程編程思想

2009-03-12 09:30:46

異常CLR.NET

2009-07-24 17:22:22

CLR 4.0安全模型

2009-10-19 14:25:16

靜態(tài)構(gòu)造函數(shù)

2010-03-29 16:48:18

Nginx內(nèi)核優(yōu)化

2023-02-16 11:58:51

契約開發(fā)測試??

2012-11-22 09:14:34

華為存儲閃存

2009-09-03 14:26:17

Jit編譯

2022-08-14 07:08:51

Hadoop契約監(jiān)控機制

2009-10-22 13:02:47

SQL SERVER

2022-05-04 10:22:39

Nodejs異步模式

2022-07-27 11:51:39

契約測試開發(fā)測試

2023-10-13 13:19:02

Java枚舉

2023-03-30 14:45:51

工業(yè)4.0物聯(lián)網(wǎng)

2010-01-27 16:24:52

2010-05-11 16:22:40

2009-11-09 14:15:17

WCF集合類型

2011-11-15 10:16:41

Android 4.0Google

2023-11-29 15:53:45

點贊
收藏

51CTO技術(shù)棧公眾號