gpt4 book ai didi

c# - 我应该为任何方法结果做 Contract.Ensures 吗?

转载 作者:太空狗 更新时间:2023-10-30 01:22:28 25 4
gpt4 key购买 nike

假设我有这个:

[Pure]
public static TimeSpan Seconds(this int i)
{
Contract.Ensures(Contract.Result<TimeSpan>() == TimeSpan.FromSeconds(i));
return TimeSpan.FromSeconds(i);
}

我如此严格地保证契约(Contract)结果是正确的,还是不必要的?


在这种情况下呢?

[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);
}

我的问题是:

  1. 我在指出如此精确的契约(Contract)保证时是否正确?
  2. 我是否有义务做出如此严格的契约(Contract)保证,为什么?
  3. 我的契约(Contract)保证重复(在我的申请中的许多情况下)return 声明可以吗?

最佳答案

想想“契约(Contract)”这个词 - 在编写代码时,您希望保证给调用者什么(或者对于Requires,您希望他们做什么为您保证)。

对于像您展示的那些微不足道的示例,我想不出有多少您希望包含在契约(Contract)中的内容。也许首先,我会选择:

[Pure]
public static TimeSpan Seconds(this int i)
{
Contract.Requires(i>0);
Contract.Ensures(Contract.Result<TimeSpan>().TotalSeconds > 0.0);
return TimeSpan.FromSeconds(i);
}

我会向来电者保证我会产生积极的结果。显然,如果我在此方法中包含更复杂的数学,则可以给出类似的契约(Contract)。我会就范围提供保证,但我不会准确保证结果是如何计算的(因为这可能会发生变化)。

关于c# - 我应该为任何方法结果做 Contract.Ensures 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13415055/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com