读书人

关于design by contract解决思路

发布时间: 2012-07-28 12:25:13 作者: rapoo

关于design by contract
最近想看看design by contract,但是ensure和require总是调不出来,希望有高手指点一下啊


using System;
using System.Diagnostics.Contracts;

public class RationalNumber
{
private int numberator;
private int denominator;

public RationalNumber(int numberator, int denominator)
{
Contract.Requires(denominator != 0, "The second argument can not be zero.");
//我理解如果分母不是0的话,应该报错啊
this.numberator = numberator;
this.denominator = denominator;
}

public int Denominator
{
get
{
Contract.Ensures(Contract.Result<int>() != 0);//同理,也应该报错
return this.denominator;
}
}

[ContractInvariantMethod]
protected void ObjectInvariant()
{
Contract.Invariant(this.denominator != 0);
}
}

public class SimpleCalculator
{
private static RationalNumber z;
public static void Main()
{
int x;
z=new RationalNumber(0,0) ;
Console.WriteLine(z.Denominator);
x = 3;
x++;
Contract.Assert(x == 4);
}
}

[解决办法]
你用Release编译运行?

用Debug编译将给你错误信息。Contract.Ensures需要下载安装Code Contract插件
http://msdn.microsoft.com/en-us/devlabs/dd491992.aspx

读书人网 >C#

热点推荐