为什么我要禁用.NET代码约定

时间:2012-11-07 19:41:29

标签: c# code-contracts

  

可能重复:
  .net 4.0 Code Contracts. When to use? When are they a waste of time?

我开始阅读.NET代码合同的完整文档,我注意到您可以指定编译器不发出与您的合同相对应的代码。但我想知道为什么有人会这样做?!我的意思是,从文档中,代码合同是关于指定代码的前/后/不变量。

查看另一个问题.net 4.0 Code Contracts. When to use? When are they a waste of time?,似乎合同应该防止对象的无效状态,但话又说回来,为什么我要禁用它们!在这样做的时候,我不会为一大堆问题敞开大门吗?

它们是否应该用作业务验证,例如确保startDate <= endDate或者我应该使用旧的if-then-throw用于业务?如果我禁用代码合同,我的类现在可能处于无效状态。

所以我的问题仍然存在,为什么我要禁用代码合同?

2 个答案:

答案 0 :(得分:1)

我能想到的一个场景是,如果您的测试条件很昂贵,您可能希望在发布版本中禁用它,以提高性能。

答案 1 :(得分:0)

出于同样的原因,Debug.Assert()未编译到Release版本中。有时您可以检测到非致命的无效条件,对于某些应用程序,继续执行是所需的行为。在发布版本中保持代码合同就像使用Trace.Assert()

我个人总是保留合同,因为我甚至没有尝试计划我的代码以某种方式在无效状态下生存。