For several years, developers have had the ability to add method level contracts via the Code Contracts research project. But this has a number of problems. It uses an imperative syntax that is verbose and poorly supported by tooling. To actually use the contract, both in the library and application, a post-compiler needs to be run. All in all it is an interesting project, but it needs first class compiler and syntax support to be useful.
Proposal 119, Method Contracts, seeks to offer this support. Like generic constraints, the pre- and post-conditions would be listed between the method signature and the body.
There are three new keywords under this proposal. The phrase beginning with “requires” deals with pre-conditions. This is mostly going to be used for checking parameters, but in theory could also look at the state of the object itself. The keyword “ensures” is used for setting up post conditions. It would reuse the “return” keyword to refer to the result of the method call.