Access Modifier (Модификатор доступа) в C#
View more Tutorials:


access modifiers в CSharp определяют доступность (Рамки) в данные полей, методов, конструктора (constructor) или класса.
Существует 5 видов access modifiers в CSharp:
- private
- protected
- internal
- protected internal
- public
Модификатор (Modifier) | Описание |
private | Доступ ограничен в рамках определения Класса. Это вид модификатора доступа по умолчанию, если нет определенного формального вида |
protected | Доступ ограничен в рамках определения Класса и любого подкласса унаследованного из этого класса. |
internal | Доступ ограничен в рамках определения Assembly текущего проекта. |
protected internal | Доступ ограничен в рамках определения текущего Assembly и определенном классе или подклассах. |
public | Не имеет ограницений при доступе в публичных членов (public) |
Таблица изображенная ниже дает вам обзор про способ использования access modifier.
С Assembly | Отличается от Assembly | ||||
---|---|---|---|---|---|
В определенном классе? | В подклассе | Вне определенного класса, вне подкласса | В подклассе | Вне подкласса | |
private | Y | ||||
protected | Y | Y | Y | ||
internal | Y | Y | Y | ||
protected internal | Y | Y | Y | ||
public | Y | Y | Y | Y | Y |
Вы можете понять более детально по примерам ниже:
private access modifier только позволяет доступ внутри класса.

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

Метод конструктора (constructor), метод (method), поле (field) называются членами в классе.
Если вы создаете класс, и имеет конструктор (constructor) имеет access modifier являющийся private, вы не можете создать объект данного класса из того private constructor инаружи данного класса. Посмотрим изображенный пример:

protected access modifier может иметь доступ внутри package, или снаружи package но должно быть через наследование.
protected access modifier только применяется для field, method и constructor. Он не может быть применен для класса (class, interface, ..).

internal это внутренний модфикатор доступа, который ограничивается Assembly.
Assembly это компилированный продукт вашего кода, обычно это DLL, но EXE так же можно считать assembly. Это самая маленькая единица развертывания любого проекта .NET.
Assembly обычно содержит код .NET по MSIL (Microsoft Intermediate language - Промежуточный язык) который будет компилирован в машинный код (Native code) ("JITted" - Компилирован с помощью Just-In-Time) в первый раз при выполнении на компьютере. Это компилированный код так же будет сохранен в Assembly и переиспользован для следующих вызовов.
Модификатор доступа protected internal это комбинация двух модификаторов доступа protected и internal, когда член класса имеет данный модификатор доступа, вы можете только иметь доступ к тому члену класса который определил его или к подклассам одного Assembly.
public access modifier это самый сильный и может иметь доступ везде. Имеет самые широкие рамки доступа по сравнению с другими modifier.

В CSharp вы можете переопределить (override) метод (method) родительского класса методом c одинаковым именем и параметром, и видом возврата подкласса, но вам не позволено менять его модификатор доступа (access modifier).

Но вы можете создать метод с одинаковым именем, параметром, видом возврата, но другим модификатором доступа, если использовать ключевое словом new, на самом деле это другой метод не связанный с методом родительского класса.

Различие между override и new объяснены в статье "Наследственность и полиморфизм в CSharp" вы можете посмотреть по ссылке: