假设我有这个:
[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);
}
我的问题是:
return
声明中重复(在我的申请中很多情况下)?答案 0 :(得分:4)
想想“合同”这个词 - 在编写代码时,您希望保证给您的来电者(或Requires
,您希望他们为什么保证为你)。
对于诸如你所展示的那些琐碎的例子,我想不出你想要包含的合同。也许第一次,我会去:
[Pure]
public static TimeSpan Seconds(this int i)
{
Contract.Requires(i>0);
Contract.Ensures(Contract.Result<TimeSpan>().TotalSeconds > 0.0);
return TimeSpan.FromSeconds(i);
}
我向我的来电者保证,我会产生积极的结果。显然,如果我在这个方法中包含更复杂的数学,那么这个类似的合同就可以给出。我将对范围给出保证,但我不能确切地保证计算结果的方式(因为这可能会有所变化)。
答案 1 :(得分:0)
方法纯度意味着,方法调用不会导致任何调用者对对象状态的可见副作用。 这就是。
当然,纯方法可以是公开的,并且可以定义自己的前后条件。这取决于具体的方法用例。