在阅读代码合同后,我无法辨别他们的目标

Upon reading about Code Contracts I cannot discern their goal

我已经开始阅读 code contracts in c#,但尽管对前提条件和后置条件进行了所有解释,但他们没有提及他们实际做了什么。

如果在运行时失败,它们是否会引发异常?

如果他们的条件不满足,他们是否检查设计时引发警告或错误?

C# 中的(现已废弃)代码契约功能实际上执行了这两个选项中的任何一个,具体取决于它的配置方式以及您使用的 Visual Studio 版本 运行。

代码契约的主要目的是证明某些程序状态在任何执行中都是不可能的。该证明将在编译时执行。进行这些证明的主要原因是为了确保程序是正确的。然而,理想情况下,这也将允许删除与不可能的程序状态相关的任何运行时检查,这将提高性能。

有时这种证明是不可能的,约束将作为普通(运行时)断言来实现。系统也可以配置为在运行时检查所有约束。

此外,系统还可以配置为忽略所有约束。

合约代码是在编译阶段之后由 re-writer 程序创建的,该程序对编译器输出的 IL 代码进行操作。因此,无论代码合同系统如何配置,原始编译器输出都是相同的。