Enum имеет меньшую доступность, чем свойство Outcome1 - PullRequest
1 голос
/ 24 февраля 2012
public class SecretNumber
{
    //Construktor
    public SecretNumber()
    {
        Initialize();
        _previousGuesses = new List<int>();
    }

    //Constant
    public const int MaxNumberOfGuesses = 7;

    //Field
    private int _number;
    private List<int> _previousGuesses;

    //Property
    public bool CanMakeGuess
    {
        get;
    }

    public int Count
    {
        get;
    }

    public int? Number
    {
        public get;
    }

    //Lite oklart hur man ska göra när fälten är autoimplementerade
    public Outcome Outcome1
    {
        get
        {
            return Outcome1;
        }
        private set
        {
            Outcome1 = value;
        }
    }

    public ReadOnlyCollection<int> PreviousGuesses
    {
        get;
        set;
    }

    //Methods
    public void Initialize()
    {
        Random random = new Random();

        _number = random.Next(1, 100);

        _previousGuesses.Clear();

        Outcome1 = Outcome.Indefinite;
    }

    private Outcome MakeGuess(int guess)
    {
        if (Number > 1 && Number < 100)
        {
            if (PreviousGuesses.Contains(guess))
            {
                return Outcome.PreviousGuess;
            }
            else if (PreviousGuesses.Count >= MaxNumberOfGuesses)
            {
                return Outcome.NoMoreGuesses;
            }
            if (Number == guess)
            {
                return Outcome.Correct;
            }
            else if (Number < guess)
            {
                return Outcome.High;
            }
     //       else if (Number > guess)
       //     {
                return Outcome.Low;
         //   }
        }
        else
        {
            throw new ArgumentOutOfRangeException("Måste vara inom intervallet 1-100");
        }
    }

    //Enumerator
    enum Outcome
    {
        Indefinite,
        Low,
        High,
        Correct,
        NoMoreGuesses,
        PreviousGuess
    }
}

Я получаю сообщение об ошибке, что мой секретный номер enum имеет меньшую доступность, чем свойство Outcome1, но я понятия не имею, почему.

Свойство называется Outcome1, поскольку в противном случае имена были перепутаны в Visual Studio.

Ответы [ 4 ]

5 голосов
/ 24 февраля 2012

Ваше перечисление имеет private видимость, так как вы не дали ему явную видимость, и оно вложено в ваш SecretNumber класс.

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

Вы можете просто сделать это публично:

public enum Outcome

1 Это не совсем то же самое, что и "публичного участника". Например, метод public (не переопределяющий) в типе internal может ссылаться на другие внутренние члены как параметры - поскольку метод все еще может вызываться только другим типом, который знает о «содержащем» типе internal в любом случае.

1 голос
/ 24 февраля 2012

Ваше перечисление не публично.Другие классы, которые будут использовать SecretNumber, не смогут использовать перечисление.

1 голос
/ 24 февраля 2012

Средство доступа по умолчанию (если оно явно не указано) - private в классе.

public enum Outcome
{
    Indefinite,
    Low,
    High,
    Correct,
    NoMoreGuesses,
    PreviousGuess
}
1 голос
/ 24 февраля 2012

У вас есть видимое для пакета enum и свойство public, которое его возвращает.Вы должны сделать Outcome1 закрытым или видимым для пакета или сделать свой enum общедоступным.Вы также можете удалить enum из своего класса, если это имеет смысл в более широком контексте.Какой вариант является правильным, это ваше дизайнерское решение.

PS Комментарий вызывает ваш enum перечислитель , который не является правильным именем для перечисляемого типа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...