2011-08-19 58 views
2

是否有一种方法可以指定交叉的代码合同要求,例如,在类级别的合同要求实例变量在该类的任何实例方法被调用时为非null,否则该调用将会失败?代码合同可以代码交叉吗?

我是新来的代码合同,一直在浏览Feb 4, 2011 Code Contracts User Manual (PDF)MSDN docs,但没有发现任何有关交叉功能的信息。也许我正在寻找代码合同没有的功能。

+2

不错的一致性。 – darvids0n

+0

谢谢@ darvids0n,对于踢腿,我在标题中将“方面”一词改为“担忧”,使其更加完整。 –

回答

0

我认为你要寻找的被称为“对象不变量”

从手动,§ 2.3

[ContractInvariantMethod] 
private void ObjectInvariant() 
{ 
    Contract.Invariant (this.y >= 0); 
    Contract.Invariant (this.x > this.y); 
} 

他们将每个公共方法调用之后进行检查
正确封装的值应该与每次调用之前相同。

+0

这很有趣。我将不得不花费更多的时间,因为当我的任何公共方法被调用时,似乎都不会访问契约方法,通过将'throw new Exception(“fyi - contract area”)''行放入ObjectInvariant () 方法。 –

+0

对于后代,我发现这个额外的教程和使用ContractInvariantMethod的代码项目的例子http://www.codeproject.com/KB/cs/CodeContracts_Pt2.aspx? –

+0

@John:这是一个设置问题(你需要FULL),但这不是普通的方法,它不被作为一个处理/执行。你的'throw'测试不起作用,只要试着打破其中一个合约。 –