betacode

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

View more Tutorials:

Сайт бесплатного изучения языков:
Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи. Facebook

1- Modifier в CSharp

access modifiers в CSharp определяют доступность (Рамки) в данные полей, методов, конструктора (constructor) или класса.

Существует 5 видов access modifiers в CSharp:
  1. private
  2. protected
  3. internal
  4. protected internal
  5. public

2- Обзор access modifier

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

С AssemblyОтличается от Assembly
В определенном классе?В подклассеВне определенного класса, вне подклассаВ подклассеВне подкласса
privateY



protectedYY
Y
internalYYY

protected internalYYY

publicYYYYY
Вы можете понять более детально по примерам ниже:

3- private access modifier

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

4- private constructor

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

5- protected access modifier

protected access modifier может иметь доступ внутри package, или снаружи package но должно быть через наследование.


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

6- internal access modifier

internal это внутренний модфикатор доступа, который ограничивается Assembly.

Assembly это компилированный продукт вашего кода, обычно это DLL, но EXE так же можно считать assembly. Это самая маленькая единица развертывания любого проекта .NET.

Assembly обычно содержит код .NET по MSIL (Microsoft Intermediate language - Промежуточный язык) который будет компилирован в машинный код (Native code) ("JITted" - Компилирован с помощью Just-In-Time) в первый раз при выполнении на компьютере. Это компилированный код так же будет сохранен в Assembly и переиспользован для следующих вызовов.

7- protected internal access modifier

Модификатор доступа protected internal это комбинация двух модификаторов доступа protected и internal, когда член класса имеет данный модификатор доступа, вы можете только иметь доступ к тому члену класса который определил его или к подклассам одного Assembly.

8- public access modifier

public access modifier это самый сильный и может иметь доступ везде. Имеет самые широкие рамки доступа по сравнению с другими modifier.

9- Модификатор доступа и наследственность 

В CSharp вы можете переопределить (override) метод (method) родительского класса методом c одинаковым именем и параметром, и видом возврата подкласса, но вам не позволено менять его модификатор доступа (access modifier).
Но вы можете создать метод с одинаковым именем, параметром, видом возврата, но другим модификатором доступа, если использовать ключевое словом new, на самом деле это другой метод не связанный с методом родительского класса.
Различие между override и new объяснены в статье "Наследственность и полиморфизм в CSharp" вы можете посмотреть по ссылке:

View more Tutorials: