如何合同.确保工作

本文关键字:确保 工作 合同 何合同 | 更新日期: 2023-09-27 18:05:23

我开始使用代码合同,而合同。require非常直接,我看不清ensure实际做了什么。

我试着创建一个简单的方法,像这样:

static void Main()
{
    DoSomething();
}
private static void DoSomething() 
{
    Contract.Ensures(false, "wrong");
    Console.WriteLine("Something");
}

我从来没有看到"错误"的消息,也没有抛出异常或其他任何东西。

那么它到底是做什么的呢?

如何合同.确保工作

如果您正在运行具有适当设置的重写工具,那么它不抛出任何是奇怪的。我猜你正在运行一个不检查后置条件的模式。

关于Contract.Ensures的令人困惑的事情是,您在方法开始时它,但它在方法结束时执行。重写器做了所有的工作来确保它正确地执行,并在必要时给出返回值。 像许多关于代码契约的事情一样,我认为最好在重写工具的结果上运行Reflector。确保你的设置是正确的,然后找出重写者做了什么。

编辑:我意识到我还没有表达Contact.Ensures。简单地说,这是为了确保你的方法在结束时完成了一些事情——例如,它可以确保它向列表中添加了一些东西,或者(更有可能)返回值是非空的,或者是正的,或者其他什么。例如,您可能有:

public int IncrementByRandomAmount(int input)
{
    // We can't do anything if we're given int.MaxValue
    Contract.Requires(input < int.MaxValue);
    Contract.Ensures(Contract.Result<int>() > input);
    // Do stuff here to compute output
    return output;
}

在重写的代码中,在返回处将有一个检查,以确保返回的值真的大于输入