代码协定提供了一种语言语法之外的验证,一般是建立在业务逻辑要求的基础上的。代码协定出前置条件,后置条件,和对象固定三块组成。
代码协定可以嵌入到 VS中使用,具体下载地址为:
http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx,。
现在分为两个版本,Standard和Premium,standard可以安装在除Express的版本上,它包含着单独的协定库。Premium版只能安装在Visual Studio 2008 Team System,Visual Studio 2010 Premium Edition,或者Visual Studio 2010Ultimate版本上。
如果在visual studio 2008的后续版本,使用代码协定是不用添加协定标记“CONTRACTS_FULL”。
安装完代码协定的安装包后,新建一个项目,选择项目的属性,如下图:
只有当选中Runtime Checking和Static Checking,项目中的代码协定的方法才会起作用。代码协定是用Contracts类实现的,它位于System.Diagnostics.Contracts命名空间,Contracts类是静态类。
class
Person
{
int age;
public Person(int age)
{
this.age = age;
}
public int Age
{
get
{
//后置协定
Contract.Ensures(Contract.Result<int>() > 0 && Contract.Result<int>() < 150);
return age;
}
set
{
//前置协定
Contract.Requires(value > 0 && value < 150, "年¨º龄¢?在¨²0到Ì?150岁¨º之?间?");
age = value;
}
}
//对象固定
[ContractInvariantMethod]
void ObjectInvariant()
{
Contract.Invariant(this.age > 0 && this.age < 150);
}
}