代码协定自定义==断言错误
本文关键字:断言 错误 自定义 代码 | 更新日期: 2023-09-27 18:25:16
我正在编写一个简单的二维物理引擎,我已经重写了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结构,我会得到以下内容:
public Vector2 Position
{
get
{
Contract.Ensures(Contract.Result<Vector2>() == position);
Contract.Assert(position == position); // Assert unproven: position == position
return position;
}
}
我添加断言作为调试的一种方式。position只是一个私有的Vector2字段,它由结构中唯一的Circle构造函数设置。Vector2本身就是一个结构。
我想我找到了问题的答案。我用私人领域来描述我的合同。一旦我将这些引用切换为使用公共属性,然后用[ControlPublicProperty("PropertyName")]注释我的字段,问题就消失了。我认为这是因为Circle结构对Vector2结构中的契约没有可见性。