代码合同问题

时间:2010-09-16 12:28:19

标签: c# warnings code-analysis code-contracts

请考虑以下代码:

public class RandomClass
{        
    private readonly string randomString;

    public RandomClass(string randomParameter)
    {
        Contract.Requires(randomParameter != null);
        Contract.Ensures(this.randomString != null);

        this.randomString = randomParameter;
    }

    public string RandomMethod()
    {
        return  // CodeContracts: requires unproven: replacement != null
            Regex.Replace(string.Empty, string.Empty, this.randomString);
    }
}

这确保randomString执行RandomMethod时不会为空CodeContracts: requires unproven: replacement != null。为什么代码合同分析忽略了这个事实并抛出{{1}}警告?

1 个答案:

答案 0 :(得分:4)

分析器可能忽略了它无法在两种方法之间建立联系的事实。

属性“field randomString is null”是类不变:它是在每次创建实例时建立的,并且在每次方法调用时都会保留,因为该字段是只读的。我恳请你提供一个陈述。它将很容易被分析仪验证,并提供必要的假设来证明RandomMethod是安全的。

This page对类不变量有一个很好的解释。