簡體   English   中英

那么C#4.0代碼合同實際上做了什么嗎?

[英]So do C#4.0 Code Contracts Actually Do Anything?

在閱讀了受到Spec#令人敬畏的System.Diagnostics.Contracts.Contract靜態類之后,我很激動,並立即開始通過調用Contract.Requires()Contract.Ensures()來編寫代碼。

我想這只是因為我的代碼是如此超級棒和無錯誤,檢查那些調用實際做了什么直到最近才出現。 一個錯誤滑過,我意識到這些電話沒有做任何事情! 我原以為他們至少會在違反條件時拋出異常,但沒有這樣的運氣。

我錯過了什么嗎? 有誰知道這是什么意思?

MSDN的合同類頁面

您必須使用二進制重寫器來插入合同的運行時強制執行。 否則,Contract.Ensures方法之類的合同只能進行靜態測試,並且如果違反合同,則不會在運行時拋出異常。 您可以從MSDN DevLabs網站上的Code Contracts下載二進制重寫器CCRewrite。 CCRewrite附帶一個Visual Studio加載項,使您可以從項目“屬性”頁面激活運行時合同實施。 二進制重寫器和Visual Studio加載項不隨Visual Studio 2010或Windows SDK一起提供。

擴展JSBangs的答案:

您必須在此處選中“執行運行時合同檢查”框:

在此輸入圖像描述

(我還檢查了“靜態檢查> Peform靜態合同檢查”框)

如果您希望.Requires調用拋出錯誤,您需要在項目設置中設置一個選項或使用.Requires<T>調用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM