代码合约自定义==断言错误

时间:2013-07-29 12:20:25

标签: c# code-contracts physics-engine

我正在编写一个简单的2d物理引擎,我为我的Vector2结构覆盖了==,如下所示:

[Pure]
public static bool operator ==(Vector2 v1, Vector2 v2)
{
  Contract.Ensures(Contract.Result<bool>() == (v1.x == v2.x && v1.y == v2.y));

  return v1.x == v2.x && v1.y == v2.y;
}

但是,当我在Circle.Ensures for Circle结构中使用它时,我得到以下内容:

public Vector2 Position
{
  get
  {
    Contract.Ensures(Contract.Result<Vector2>() == position);

    Contract.Assert(position == position); // Assert unproven: position == position

    return position;
  }
}

我添加了断言作为一种调试方式。 position只是一个私有的Vector2字段,它由结构中唯一的Circle构造函数设置。 Vector2本身就是一个结构。

1 个答案:

答案 0 :(得分:0)

我想我找到了问题的答案。我正在使用私人字段来描述我的合同。一旦我将这些引用切换为使用公共属性,然后使用[ContractPublicProperty(“PropertyName”)]注释我的字段,问题就消失了。我相信这是因为Circle结构对Vector2结构中的契约没有可见性。