代码之家  ›  专栏  ›  技术社区  ›  George Mauer

那么,C 4.0代码契约实际上做了什么?

  •  15
  • George Mauer  · 技术社区  · 15 年前

    在阅读了关于 System.Diagnostics.Contracts.Contract 静态类受到了规范的惊人影响我很兴奋,立即开始用调用来填充我的代码。 Contract.Requires() Contract.Ensures() .

    我想这仅仅是因为我的代码非常棒,而且没有bug,所以检查这些调用是否真的做了一些直到最近才出现的事情。一个bug溜了过去,我意识到这些调用没有任何作用!我本以为他们至少会在违反条件时抛出一个异常,但没有这样的运气。

    我错过什么了吗?有人知道这是什么意思吗?

    3 回复  |  直到 12 年前
        1
  •  17
  •   JSBÕ±Õ¸Õ£Õ¹    15 年前

    the Contract Class page at MSDN :

    必须使用二进制重写器 插入的运行时强制 合同。否则,合同 作为合同。确保方法可以 只进行静态测试,不会 在运行时引发异常,如果 违反合同。你可以下载 二进制重写器ccrewrite来自 msdn-devlabs网站上的代码合同 站点。Ccrewrite带有一个可视的 使您能够 启用运行时合同强制 从“项目属性”页。这个 二进制重写器和Visual Studio 加载项不随Visual Studio一起提供 2010或Windows SDK。

        2
  •  2
  •   B. Clay Shannon-B. Crow Raven    12 年前

    扩展jsbang的答案:

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

    (我还选中了“静态检查”框)

    “合同检查”框:

    enter image description here

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

        3
  •  0
  •   unclepaul84    15 年前

    如果你想要 .Requires 调用以引发错误您需要在项目设置中设置选项或使用 .Requires<T> 呼叫

    推荐文章