c# – 我应该为任何方法结果做Contract.Ensures吗?
作者:互联网
假设我有这个:
[Pure]
public static TimeSpan Seconds(this int i)
{
Contract.Ensures(Contract.Result<TimeSpan>() == TimeSpan.FromSeconds(i));
return TimeSpan.FromSeconds(i);
}
我是否确保合同以如此严格的方式产生,或者是否是必要的?
在这种情况下?
[Pure]
public static T IfTrue<T>(this bool b, T value)
{
Contract.Ensures(Contract.Result<T>().Equals(b ? value : default(T)));
return b ? value : default(T);
}
我的问题是:
>在表明如此精确的合同保证时,我是对的吗?
>我有义务做出如此严格的合同保证吗?为什么?
>可以,我的合同保证会(在我的申请中的许多情况下)重复报表吗?
解决方法:
想想“合同”这个词 – 你在编写代码时,希望向你的来电者保证(或者对于需求,你希望他们为你保证什么).
对于诸如你所展示的那些琐碎的例子,我想不出你想要作为合同包含的内容.也许第一次,我会去:
[Pure]
public static TimeSpan Seconds(this int i)
{
Contract.Requires(i>0);
Contract.Ensures(Contract.Result<TimeSpan>().TotalSeconds > 0.0);
return TimeSpan.FromSeconds(i);
}
我向我的来电者保证,我会产生积极的结果.显然,如果我在这个方法中包含更复杂的数学,那么这个类似的合同就可以给出.我将对范围给出保证,但我不能确切地保证计算结果的方式(因为这可能会有所变化).
标签:c,code-contracts 来源: https://codeday.me/bug/20190625/1287398.html