0

我正在编写一个简单的 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;
}

但是,当我在 Contract.Ensures 中为我的 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 本身就是一个结构。

4

1 回答 1

0

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

于 2013-07-30T09:30:13.847 回答