Contract.Invariant不通过静态验证程序检查

时间:2014-12-11 10:34:56

标签: .net code-contracts

我正在尝试代码合同,我遇到了一个问题。我上课了:

public class SpecialPoint
{
    public int X { get; set; }
    public int Y { get; set; }

    public SpecialPoint(int x, int y)
    {
        Contract.Requires<ArgumentException>(y > x);
        X = x;
        Y = y;
    }


    [ContractInvariantMethod]
    private void ClassContract()
    {
        Contract.Invariant(Y > X);
    }
}

我对它进行了测试:

[TestFixture]
class SpecialPointTests
{
    [Test]
    public void SpecialPoint()
    {
        var p = new SpecialPoint(10, 20); 
        p.X = 30;
    }
}

我希望静态检查员警告我有关分配p.X = 30;因为这违反了不变量,但它只发生在运行时。 我有静态分析启用。我的版本是1.7.11202.10。

1 个答案:

答案 0 :(得分:3)

来自MSDN page on Contract.Invariant

  

运行时检查期间,会在每个公共方法的末尾检查不变量。