2013-07-29 34 views
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; 
} 

然而,当我走在合同中使用。我得到以下结果:

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

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

    return position; 
    } 
} 

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

回答

0

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