Can code contracts cross-cut concerns of code?
Is there a way to specify code contract requirements that are cross-cutting, for example a contract at the class level to require an instance variable to be non-null whenever any instance method on that class is invoked, or else the call will fail?
I'm new t开发者_JAVA百科o code contracts and have been skimming the Feb 4, 2011 Code Contracts User Manual (PDF) and the MSDN docs but nothing pops out at me about cross-cutting features. Maybe I'm searching for a feature that code contracts do not have.
I think that what you're looking for are called "object invariants"
From the manual, § 2.3
[ContractInvariantMethod]
private void ObjectInvariant ()
{
Contract.Invariant ( this.y >= 0 );
Contract.Invariant ( this.x > this.y );
}
They will be checked after each public method call.
For properly encapsulated values that should be the same as before each call.
精彩评论