Путаница с перечислениями и публичными классами - почему это не работает? - PullRequest
2 голосов
/ 21 ноября 2010


Имея следующий код, он продолжает сообщать о несовместимости доступности, но я не понимаю, почему.Это зависит от того, является ли класс Программы общедоступным:

enum Test
    {A,B}

    public class Program  //when I remove public, it works
    {
        public Test a = Test.A;

        static void Main(string[] args)
        {

        }
    }

Ответы [ 4 ]

4 голосов
/ 21 ноября 2010

Вы не добавили модификатор доступа в объявление enum, а затем выставили его как поле public вашего класса Program. Если вы не объявляете модификатор доступа, это private.

public enum Test { A, B }
2 голосов
/ 22 ноября 2010

Поскольку вы явно не объявили модификатор доступа (т. Е. public, protected, internal) в вашем перечислении, оно принимает значение по умолчанию (которое является internal для классов и перечислений). Затем вы выставляете это перечисление через поле public вашего класса Program, что недопустимо, так как перечисление не видно вне его сборки.

Вам необходимо либо объявить перечисление как public, либо изменить модификатор доступа для поля на internal или private.

Работает, когда вы удаляете public из класса Program, потому что он меняет класс Program на внутренний - так же, как перечисление. Это нормально, поскольку ни один из них не является публично разоблаченным.

2 голосов
/ 21 ноября 2010

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

1 голос
/ 21 ноября 2010

вам, вероятно, нужно установить перечисление в public

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