是否有一种方法可以指定交叉的代码合同要求,例如,在类级别的合同要求实例变量在该类的任何实例方法被调用时为非null,否则该调用将会失败?代码合同可以代码交叉吗?
我是新来的代码合同,一直在浏览Feb 4, 2011 Code Contracts User Manual (PDF)和MSDN docs,但没有发现任何有关交叉功能的信息。也许我正在寻找代码合同没有的功能。
是否有一种方法可以指定交叉的代码合同要求,例如,在类级别的合同要求实例变量在该类的任何实例方法被调用时为非null,否则该调用将会失败?代码合同可以代码交叉吗?
我是新来的代码合同,一直在浏览Feb 4, 2011 Code Contracts User Manual (PDF)和MSDN docs,但没有发现任何有关交叉功能的信息。也许我正在寻找代码合同没有的功能。
我认为你要寻找的被称为“对象不变量”
从手动,§ 2.3
[ContractInvariantMethod]
private void ObjectInvariant()
{
Contract.Invariant (this.y >= 0);
Contract.Invariant (this.x > this.y);
}
他们将每个公共方法调用之后进行检查。
正确封装的值应该与每次调用之前相同。
这很有趣。我将不得不花费更多的时间,因为当我的任何公共方法被调用时,似乎都不会访问契约方法,通过将'throw new Exception(“fyi - contract area”)''行放入ObjectInvariant () 方法。 –
对于后代,我发现这个额外的教程和使用ContractInvariantMethod的代码项目的例子http://www.codeproject.com/KB/cs/CodeContracts_Pt2.aspx? –
@John:这是一个设置问题(你需要FULL),但这不是普通的方法,它不被作为一个处理/执行。你的'throw'测试不起作用,只要试着打破其中一个合约。 –
不错的一致性。 – darvids0n
谢谢@ darvids0n,对于踢腿,我在标题中将“方面”一词改为“担忧”,使其更加完整。 –