0

可能重复:
.net 4.0 代码合同。什么时候使用?他们什么时候浪费时间?

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

查看另一个问题.net 4.0 Code Contracts。什么时候使用?他们什么时候浪费时间?,似乎合约应该防止对象的无效状态,但话又说回来,我为什么要禁用它们!这样一来,我岂不是为一大堆问题打开了大门吗?

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

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

4

2 回答 2

1

我能想到的一种情况是,如果您的条件测试成本很高,您可能希望在发布版本中禁用 then 以提高性能。

于 2012-11-07T19:45:13.460 回答
0

出于同样的原因Debug.Assert(),没有编译到 Release 版本中。有时您可以检测到非致命的无效条件,并且对于某些应用程序来说,继续执行是期望的行为。在 Release 构建中保持代码契约就像使用Trace.Assert().

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

于 2012-11-07T19:50:41.830 回答