那么C#4.0代码合同实际上做了什么吗?

时间:2010-05-21 16:18:25

标签: c# .net c#-4.0 code-contracts

在阅读了受到Spec#强大影响的System.Diagnostics.Contracts.Contract静态类之后,我很激动,并立即开始通过调用Contract.Requires()Contract.Ensures()来查看代码。

我想这只是因为我的代码非常棒且没有错误,因此检查这些调用确实做了一些事情直到最近才出现。一个错误滑过,我意识到这些电话没有做任何事情!我原以为他们至少会在违反条件时抛出异常,但没有这样的运气。

我错过了什么吗?有谁知道重点是什么?

3 个答案:

答案 0 :(得分:17)

来自the Contract Class page at MSDN

  

您必须使用二进制重写器   插入运行时强制执行   合同。否则,合同就是这样   作为Contract.Ensures方法可以   只能静态测试,不会   如果a,在运行时抛出异常   合同被违反。你可以下载   二进制重写器CCRewrite来自   MSDN DevLabs Web上的代码合同   现场。 CCRewrite附带一个Visual   Studio加载项,使您可以   激活运行时合同执行   从项目属性页面。该   二进制重写器和Visual Studio   加载项不随Visual Studio一起提供   2010或Windows SDK。

答案 1 :(得分:2)

扩展JSBangs的回答:

您必须在此处选中“执行运行时合同检查”框:

enter image description here

(我还检查了“静态检查> Peform静态合同检查”框)

答案 2 :(得分:0)

如果您希望.Requires调用引发错误,则需要在项目设置中设置选项或使用.Requires<T>调用