С каких пор перечисления C # могут быть приватными? - PullRequest
0 голосов
/ 23 мая 2019

Я думал, что это невозможно, но каким-то образом вы МОЖЕТЕ добавить модификатор к enum, отличному от public.

Этот код прекрасно работает и действует как действительный закрытый член (недоступен вне класса C:

namespace N {
    public class C {
        private enum E { ... }
    }
}

Согласно ответу @ Бена в этом вопросе это должно быть невозможно:

Краткий ответ: минимально возможный доступ (см. Ответ Джона Скита).

Длинный ответ:

Не вложенные типы, перечисления и делегированные права доступа ( может иметь только внутреннюю или общедоступную доступность )

                     | Default   | Permitted declared accessibilities
------------------------------------------------------------------
namespace            | public    | none (always implicitly public)

enum                 | public    | none (always implicitly public)

interface            | internal  | public, internal

class                | internal  | public, internal

struct               | internal  | public, internal

delegate             | internal  | public, internal

Вложенный тип и членские права доступа

                     | Default   | Permitted declared accessibilities
------------------------------------------------------------------
namespace            | public    | none (always implicitly public)

enum                 | public    | none (always implicitly public)

interface            | public    | none

class                | private   | All¹

struct               | private   | public, internal, private²

delegate             | private   | All¹

constructor          | private   | All¹

interface member     | public    | none (always implicitly public)

method               | private   | All¹

field                | private   | All¹

user-defined operator| none      | public (must be declared public)

¹ Все === общедоступный, защищенный, внутренний, закрытый, защищенный внутренний

² структуры не могут наследоваться от структур или классов (хотя они могут, интерфейсы), следовательно, защищенный не является допустимым модификатором

Доступность вложенного типа зависит от его доступности. домен, который определяется как заявленной доступностью член и домен доступности сразу содержащих тип. Тем не менее, домен доступности вложенного типа не может превышать что содержащего типа.

Примечание: CIL также имеет положение для защищенного и внутреннего (как в отличие от существующего защищенного "или" внутреннего), но, насколько мне известно это в настоящее время недоступно для использования в C #.


См:

http://msdn.microsoft.com/en-us/library/ba0a1yw2.aspx
http://msdn.microsoft.com/en-us/library/ms173121.aspx
http://msdn.microsoft.com/en-us/library/cx03xt0t.aspx (Человек, которого я люблю URI Microsoft ...)

1 Ответ

4 голосов
/ 23 мая 2019

Это описание доступности членов для enum, а не самого enum.Всем членам перечисления нельзя присвоить модификаторы доступности, и они всегда общедоступны.

Так что вы не можете сделать это:

public enum Foo
{
    public SomeValue = 1,
    internal AnotherValue = 2,
}

SomeValue и AnotherValue всегда будут неявно публичными.

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