【发布时间】:2011-08-13 19:00:53
【问题描述】:
我开始使用代码合同,虽然 Contract.Requires 非常简单,但我无法看到 Ensures 的实际作用。
我尝试过创建一个像这样的简单方法:
static void Main()
{
DoSomething();
}
private static void DoSomething()
{
Contract.Ensures(false, "wrong");
Console.WriteLine("Something");
}
不过,我从来没有看到“错误”消息,也没有抛出异常或其他任何东西。
那么它实际上是做什么的呢?
【问题讨论】:
-
我开始你的例子,并在向控制台写入了一些东西后得到了一个未处理的异常
ContractException“后置条件失败:错误错误”。所以看起来效果不错。 -
静态证明者是代码合约背后的真正价值,尽管从分析上讲,这确保条件非常奇怪。大致相当于要求一个人证明“这句话是假的”的真实性。
-
虚假部分只是为了确保它被触发:-)
-
@Dan Bryant:实际上,它是有用的。你可以用它来标记永远不会返回的方法,所以如果你有一些调用(例如)
Environment.Exit,你可以用Contract.Ensures(false)标记它。然后静态检查器可以使用此信息。
标签: c# code-contracts