私は単純な 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 自体が構造体です。