日期:2014-05-18  浏览次数:20931 次

关于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