【问题标题】:So do C#4.0 Code Contracts Actually Do Anything?那么 C#4.0 代码契约实际上有什么作用吗?
【发布时间】:2010-05-21 16:18:25
【问题描述】:

在阅读了受 Spec# 影响的 System.Diagnostics.Contracts.Contract 静态类之后,我激动不已,并立即开始在我的代码中添加对 Contract.Requires()Contract.Ensures() 的调用。

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

我错过了什么吗?有谁知道这到底是什么意思?

【问题讨论】:

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


    【解决方案1】:

    来自the Contract Class page at MSDN

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

    【讨论】:

      【解决方案2】:

      扩展 JSBangs 的回答:

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

      (我还选中了“静态检查>执行静态合同检查”框)

      【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 什么意思?什么选择?我正在使用 .Requrires()
      • 在项目属性下,前往“代码合同”选项卡。
      猜你喜欢
      • 2011-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-09
      • 2012-08-20
      • 1970-01-01
      相关资源
      最近更新 更多