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;
}

ただし、Circle 構造体の Contract.Ensures でこれを使用すると、次のようになります。

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 に答える