我正在关注 codecontracts 教程(https://docs.microsoft.com/en-us/dotnet/framework/debug-trace-profile/code-contracts#usage-guidelines),但我似乎无法让最简单的事情正常工作. 给定方法定义
public int Add(int x, int y)
{
Contract.Requires(x > 0);
Contract.Requires(y > 0);
return x+y;
}
当我调用o.Add(0,0)
该方法时,前置条件检查不会失败。当我处于调试模式时,Contract.Requires()
会跳过这些语句。我在哪里做错了?
第二个问题可以Contract.Invariant()
用来检查循环不变量吗?根据对象不变量的定义,Object invariants are conditions that should be true for each instance of a class whenever that object is visible to a client.
这似乎与循环不变量有点不同,因为在每次循环迭代中,循环不变量可能不一定对客户端可见,因此它可能违反属性但未被检查。这种理解正确吗?