假设我有这个:
[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语句吗?发布于 2012-11-16 13:25:01
想想“合同”这个词--在编写代码时,您希望向调用方保证什么(或者对于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);
}我会向我的来电者保证我会产生积极的结果。显然,如果我在这个方法中包含了更复杂的数学,这个类似的合同就可以给出。我将保证范围,但我不会保证结果是如何计算的(因为这可能会发生变化)。
发布于 2012-11-16 11:24:02
方法的纯度意味着,该方法调用不会导致任何调用者可见的副作用到对象状态.就这样。
当然,纯方法可以是公开的,并且可以定义自己的前后条件。这取决于具体的方法用例。
https://stackoverflow.com/questions/13415055
复制相似问题