В определениях членов позволяется управлять уровнем доступа к ним. Видимость члена определяется уровнем доступа, указанным в его определении, а также уровнем доступа содержащего его типа, если таковой имеется. Для указания уровня доступа используется модификатор доступа:
Модификатор доступа | Описание | Элементы, которые можно объявить с данным модификатором | Контекст объявления, в котором можно использовать модификатор |
Public | Открытый уровень доступа. Доступ к члену не ограничен. | классы, интерфейсы, перечисления, структуры, делегаты константы, переменные, процедуры и функции, свойства, события |
класс, пространство имен, структура |
Private | Закрытый уровень доступа. Доступ к члену ограничен только классом, содержащим данный член. | константы, переменные, процедуры и функции, свойства, события |
класс, структура |
Protected | Родовой уровень доступа. Доступ к члену ограничен классом, в котором он определён, а также классами, производными от него. | константы, переменные, процедуры и функции, свойства, события |
класс |
Friend | Сборочный уровень доступа. Доступ к члену ограничен сборкой (программой), в которой он определён. | классы, интерфейсы, перечисления, структуры, делегаты, события |
класс, пространство имен, структура |
Protected Friend | Сборочный родовой уровень доступа. Доступ к члену ограничен либо текущей сборкой, либо классами, производными от класса, содержащего данный член или при соблюдении каждого из условий. | константы, переменные, процедуры и функции, свойства, события |
класс |
В зависимости от контекста, в котором производится определение члена, возможно использование только некоторых модификаторов доступа. В случае, если определение члена не содержит модификатора доступа, его видимость определяется уровнем доступа по умолчанию.
Пространства имен неявно имеют открытый доступ. Использование модификаторов доступа в определениях пространств имен недопустимо.
Типы, определенные внутри единиц компиляции или пространств имен, могут иметь открытый или сборочный уровень доступа. По умолчанию они имеют сборочный уровень доступа.
Члены классов могут иметь любой из пяти определенных уровней доступа и по умолчанию имеют закрытый уровень доступа.
Члены структур могут иметь открытый, сборочный или закрытый уровень доступа, т.к. структуры неявно являются завершенными типами. По умолчанию они имеют закрытый уровень доступа.
Члены интерфейсов неявно имеют открытый уровень доступа. Использование модификаторов доступа в определениях членов интерфейсов не допускается.
Члены перечислений неявно имеют открытый уровень доступа. Использование модификаторов доступа в определениях членов перечислений не допускается.
Определенные конструкции в языке требуют, чтобы тип имел уровень доступа не ниже чем член или другой тип.
Определены следующие ограничения:
Уровень доступа родительского класса не должен быть ниже уровня доступа класса, для которого он является родительским.
Уровень доступа для интерфейсов, являющихся базовыми для другого интерфейса, должен быть не ниже уровня доступа этого интерфейса.
Типы параметров и возвращаемого значения делегата должны иметь уровень доступа не ниже чем уровень доступа самого делегата.
Тип константы должен иметь уровень доступа не ниже чем уровень доступа самой константы.
Тип поля и типы его параметров должны иметь уровень доступа не ниже чем уровень доступа самого поля.
Типы параметров и возвращаемого значения метода должны иметь уровень доступа не ниже чем уровень доступа самого метода.
Тип свойства должен иметь уровень доступа не ниже чем уровень доступа самого свойства.
Тип события должен иметь уровень доступа не ниже чем уровень доступа самого события.
Типы параметров экземплярного конструктора должны иметь уровень доступа не ниже чем уровень доступа самого конструктора.
См. также: