代码合同理解错误

时间:2011-06-15 19:12:22

标签: .net-4.0 code-contracts

我刚开始使用Code Contracts,需要一点帮助来纠正错误:

鉴于此代码:

class MyClass
{
    private bool _isUsed = false;

    public void SomeMethod()
    {
        Contract.Requires(!_isUsed);
    }
}

我收到以下错误:

error CC1038: Member 'MyClass._isUsed' has less visibility than the enclosing method 'MyClass.SomeMethod'

似乎使很多标准支票无法使用。我在这个例子中缺少什么?

2 个答案:

答案 0 :(得分:8)

已经解释过,_isUsed有可见性问题(来电者没有控制权),这是由要求正确执行的。

但是,根据您要通过合同完成的工作,Contract.Assert可能会满足您的需求。

public void SomeMethod()
{
    Contract.Assert(!_isUsed);
}
当需求不是时,

才有效。

答案 1 :(得分:5)

你有一个公共方法SomeMethod。但是,您要求将私有成员变量设置为false。您无法设置_isUsed,因此您要检查调用者无法控制的变量。

你可以_isUsed成为一个属性,即

public bool IsUsed {get; set;}

然后在你的SomeMethod()中

Contract.Requires(!IsUsed);