Код контракта понимание ошибки - PullRequest
8 голосов
/ 15 июня 2011

Я только начинаю работать с 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 ]

8 голосов
/ 14 августа 2012

Уже было объяснено, что либо _isUsed имеет проблемы с видимостью (вызывающий не имеет контроля), что справедливо обеспечивается требованиями.

Однако, в зависимости от того, что вы пытаетесь выполнить с помощью Контракта,Contract.Assert может удовлетворить ваши потребности.

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

будет действительным, в то время как Требование не было.

5 голосов
/ 15 июня 2011

У вас есть публичный метод SomeMethod.Однако вам требуется, чтобы для закрытой переменной-члена было задано значение false.Вы не предоставляете способ установки _isUsed, и поэтому вы помещаете проверку в переменную, которую вызывающий не может контролировать.

Вы можете сделать _isUsed в свойстве, т.е.

public bool IsUsed {get; set;}

И тогда в вашем SomeMethod () есть

Contract.Requires(!IsUsed);
...