Модификаторы доступа: C# и .NET | Модификаторы доступа
Модификаторы доступа C#
Модификаторы доступа (или уровни доступности) служат для ограничения доступности типов C# и членов класса. В C# доступны следующие модификаторы доступа:
Модификатор доступа | Описание модификатора доступа |
---|---|
public | Максимально открытый тип. |
private | Максимально закрытый тип. Доступ возможен только внутри типа. |
protected | Доступ внутри типа или внутри наследников типа. |
internal | Доступ только внутри сборки, которая содержит тип. |
protected internal | Доступ внутри сборки и во всех типах, которые наследуют текущий тип. |
private protected | Доступ внутри класса или в типах, которые наследуют текущий тип и находятся внутри текущей сборки. |
Пример применения модификаторов доступа:
public class Point { private int x_; private int y_; public void Paint() { } }
В этом примере объявляется открытый (public
) класс Point
с двумя закрытыми полями x_
и y_
(private
) и одним открытым методом Paint()
. Досту к закрытым полям класса можно получить только внутри этого класса, а метод Paint()
доступен везде где используются объекты класса Point
.
Модификаторы доступа членов типов.
По умолчанию (если явно не указан модификатор доступа) в C# членам классов и структур назначается модификатор доступа private
, а членам интерфейсов и перечислений – public
. Для интерфейсов и перечислений вообще нельзя изменить модификатор доступа для членов этих типов. А для членов структур недоступны некоторые модификаторы доступа, которые доступны для членов классов. Это связано с тем, что структуры в отличие от классов не могут иметь наследников.
Тип | Модификатор доступа члена по умолчанию | Доступные изменения модификатора |
---|---|---|
class | private | Любые модификаторы доступа |
struct | private | Модификаторы доступа не связанные с наследованием: public, private, internal |
enum | public | Изменения уровня доступа членов недоступны. |
interface | public | Изменения уровня доступа членов недоступны. |
Уровни доступности типов
Классы, структуры, перечисления, интерфейсы и другие типы, если явно не указан уровень доступа, по умолчанию определятся как internal
. Т.е. эти типы являются открытыми внутри сборки.
Модификаторы доступа пространств имен
К пространствам имен модификаторы доступа не применяются. Пространства имен всегда открыты.
модификаторы доступа уровни доступности
Модификаторы доступа public, private, protected в Java.
В Java можно управлять доступом (видимостью) методов и переменных класса из других классов. Модификатор доступа отвечает на вопрос «Кто может обращаться к данному методу/переменной?». Каждому методу или переменной можно указывать только один модификатор.
1) Модификатор «public».
К переменной, методу или классу, помеченному модификатором public, можно обращаться из любого места программы. Это самая высокая степень открытости – никаких ограничений нет.
2) Модификатор «private».
К переменной, методу или классу, помеченному модификатором private, можно обращаться только из того же класса, где он объявлен. Для всех остальных классов помеченный метод или переменная – невидимы. Это самая высокая степень закрытости – только свой класс. Такие методы не наследуются и не переопределяются. Доступ к ним из класса-наследника также невозможен.
3) Модификатор «по умолчанию».
Если переменная или метод не помечены никаким модификатором, то считается, что они помечены модификатором «по умолчанию». Переменные и методы с таким модификатором видны всем классам пакета, в котором они объявлены, и только им. Этот модификатор еще называют «package» или «package private», намекая, что доступ к переменным и методам открыт для всего пакета, в котором находится их класс
4) Модификатор «protected».
Этот уровень доступа чуть шире, чем package. К переменной, методу или классу, помеченному модификатором protected, можно обращаться из его же пакета (как package), но еще из всех классов, унаследованных от текущего.
Поясняющая таблица:
Тип видимости | Ключевое слово | Доступ | |||
---|---|---|---|---|---|
Свой класс | Свой пакет | Класс — наследник | Все классы | ||
Закрытый | private | Есть | Нет | Нет | Нет |
Пакет | (нет модификатора) | Есть | Есть | Нет | Нет |
Защищенный | protected | Есть | Есть | Есть | Нет |
Открытый | public | Есть | Есть | Есть | Есть |
ООП/Модификаторы доступа — Энциклопедия программирования
Модификаторы доступа — ключевые слова, задающие определённую объявленную доступность члена или типа.
В языках программирования поддерживающих объектно-ориентированную парадигму имеются так называемые «Модификаторы доступа», которые реализуют многоуровневую инкапсуляцию (скрытие данных). Модификаторы доступа определяют область видимости каждого конкретного элемента класса. «Базовых» модификаторов доступа всего 3, но есть исключения как например в Java.
Список модификаторов доступа
В большинстве популярных языков программирования реализующих парадигму объектно-ориентированного подхода программирования имеется 3-4 модификатора доступа.
-
public
-
protected
-
internal
-
private
-
package
Функции модификаторов доступа
При помощи модификаторов доступа можно задать следующие пять уровней доступности:
- Public (публичный, общий, открытый): Неограниченный доступ.
- Protected (защищённый): Доступ ограничен содержащим классом или типами, которые являются производными от содержащего класса.
- Internal (внутренний): Доступ ограничен текущей сборкой.
- Protected internal (защищённый внутренний): Доступ ограничен пределами сборки или типа, который является производным от данного класса.
- Private (приватный, личный, собственный): Доступ ограничен содержащим типом.
- Package (пакет): псевдомодификатор доступа, специфичен для Java. Классы, определенные без явно заданных модификаторов доступа (public, protected, private), видимы только внутри пакета (т.о. без модификатора — только внутри пакета (по умолчанию, Package)).
Подробнее о функциях модификаторов доступа
Модификатор public означает, что свойство, метод или конструктор будут доступны для всех объектов, которые их используют. То есть такие члены видны как на уровне объекта класса, так же и для дочерних классов, которые будут их наследовать.
Protected означает, что данный элемент может быть использован только в самом объекте, а также в его дочерних. То есть объект может быть унаследован наследниками, но на уровне объекта к нему нельзя обратиться напрямую.
И модификатор private означает, что данный элемент может быть использован только в самом объекте (в классе) и нигде больше.
Действие модификаторов доступов распространяется как на модель наследования, так и на объекты классов.
Объекты классов
Через объект класса можно обратиться только к Public (открытым) членам класса и более не к каким.
Наследование
При наследовании (расширении) классом наследником берутся только Public и Protected члены родительского класса, в свою очередь члены с модификатором доступа Private видны только внутри объявленного класса и больше нигде.
Таблица влияний модификаторов доступа
Наглядное представление влияний модификаторов доступа в Java:
В других языках почти всё тоже самое, таким образом можно заключить, что таблица универсальна.
Области видимости и модификаторы доступа. Курс «Программирование на Java»
Область видимости переменной, метода или класса – это их свойство быть доступными из тех или иных частей кода, т. е. различных областей программы. Область видимости может определяться как самим местом объявления идентификатора, так и применением к нему модификатора доступа.
Отдельно следует отметить модификатор static, который регулирует не область видимости, а обозначает статические переменные и методы, которые существуют без необходимости создания объекта, обращаться к ним следует через имя класса. Статические переменные существуют все время работы программы, однако это не мешает регулировать область их видимости модификаторами доступа.
Если переменная объявляется в теле метода, в цикле или условной конструкции, то она исчезает после завершения работы метода, цикла или ветки. То же самое касается аргументов методов, переменные-аргументы существуют только в момент выполнения метода. Следовательно, такие локальные переменные не могут быть доступными из других блоков кода. Модификаторы доступа здесь не используются.
Переменные-поля и методы (не статические) объекта существуют только в период жизни этого объекта. При этом их область видимости регулируется модификаторами. Классы существуют всегда, к ним также применяются модификаторы доступа, но не все.
В программах на языке Java часто используют два модификатора доступа – public и private. Реже – protected. Кроме того, есть так называемый модификатор по умолчанию, который используется, когда не указан ни один другой.
Если к полю, методу или классу применен модификатор public, к ним можно обращаться из любого места программы. То есть public-сущности доступны любым другим классам как в текущем пакете, так и за его пределами. Данное положение не отменяет необходимости импорта пакета.
Модификатор private применяется к переменным или методам, по отношению к классам не имеет смысла. К таким private-сущностям можно обращаться только из того же класса, где они объявлены. Для всех остальных классов, в том числе дочерних, такие поля и методы остаются невидимыми.
Если никакой модификатор не используется, считается, что используется модификатор по умолчанию. Классы, поля или методы с таким модификатором видны всем классам пакета, в котором они объявлены. Другими словами, видны в пределах текущего каталога.
Модификатор protected схож с модификатором по умолчанию, за одним исключением. Поля и методы доступны не только в пределах пакета, но и в классах-наследниках, т. е. производных классах, даже если они находятся в другом пакете.
Таким образом степень приватности увеличивается так: public → protected → default → private.
Рассмотрим пример. Файл Main.java:
public class Main { public static void main(String[] args) { Book a = new Book("The Way", -50); System.out.println(a.getTitle()); System.out.println(a.getPage()); } }
Файл Book.java:
class Book { private String t; private int p; Book(String title, int page) { this.t = title; this.p = testPage(page); } String getTitle() { return this.t; } int getPage() { return this.p; } private int testPage(int pg) { if (pg > 0) return pg; else return -pg; } }
Оба файла находятся в одном каталоге, т. е. принадлежать одному пакету. Поэтому в классе Book можно не использовать модификатор public, чтобы предоставить доступ к Book классу Main. Метод testPage может использоваться только внутри класса Book.
Если бы в каталог, где находятся Main.java и Book.java, был вложен другой каталог-пакет с классами, то эти классы должны были бы иметь модификатор public для доступа к ним из Main.
Таким образом, классы в Java могут иметь модификатор public, либо не иметь явно указанного модификатора. У полей и методов может быть один из четырех, считая модификатор по умолчанию. Однако объявление публичного метода в непубличном классе вряд ли имеет смысл.
Также не следует забывать про модификатор static, который, если используется, пишется после модификатора доступа. Следом указывается тип переменной или возвращаемое методом значение. Далее идут имя переменной или метода. Если метод ничего не возвращает используется ключевое слово void.
Модификаторы доступа C # (спецификаторы) с примером
- Home
Testing
- Back
- Agile Testing
- BugZilla
- Cucumber
- Database Testing
- J2000 Тестирование базы данных
- Назад
- JUnit
- LoadRunner
- Ручное тестирование
- Мобильное тестирование
- Mantis
- Почтальон
- QTP
- Назад
- Центр качества (ALM)
- Центр качества (ALM)
- Управление тестированием
- TestLink
SAP
- Назад
- ABAP
- APO
- Начинающий
- Basis
- BODS
- BI
- BPC
- CO
- Назад
- CRM
- Crystal Reports
- QM4000
- QM4
- Заработная плата
- Назад
- PI / PO
- PP
- SD
- SAPUI5
- Безопасность
- Менеджер решений
- Successfactors
- Учебники SAP
- Apache
- AngularJS
- ASP.Net
- C
- C #
- C ++
- CodeIgniter
- СУБД
- JavaScript
- Назад
- Java
- JSP
- Kotlin
- Linux
- Linux
- Kotlin
- Linux
- Perl
js
- Назад
- PHP
- PL / SQL
- PostgreSQL
- Python
- ReactJS
- Ruby & Rails
- Scala
- SQL
- SQL
- UML
- VB.Net
- VBScript
- Веб-службы
- WPF
000
000
0003 SQL
000
0003 SQL
000
Обязательно учите!
- Назад
- Бухгалтерский учет
- Алгоритмы
- Android
- Блокчейн
- Business Analyst
- Создание веб-сайта
- CCNA
- Облачные вычисления
- COBOL
9000 Compiler
9000
новых вопросов о модификаторах доступа — qaru
Переполнение стека
- Около
Продукты
- Для команд
Переполнение стека
Общественные вопросы и ответыПереполнение стека для команд
Где разработчики и технологи делятся частными знаниями с коллегамиВакансии
Программирование и связанные с ним технические возможности карьерного ростаТалант
Нанимайте технических специалистов и создавайте свой бренд работодателяРеклама
Обратитесь к разработчикам и технологам со всего мира- О компании
.