Инкапсуляция в классах. Ключевые слова private, protected, public, internal
Содержание
- 1. Категории модификаторов доступа
- 2. Модификаторы доступа для класса
- 3. Модификаторы доступа для элемента (члена) класса
- 4. Ключевое слово private. Особенности использования
- 5. Ключевое слово public. Рисунок
- 6. Ключевое слово protected. Рисунок
- 7. Ключевое слово internal. Рисунок
- 8. Модификатор доступа protected internal. Рисунок
- Связанные темы
Поиск на других ресурсах:
1. Категории модификаторов доступа
При использовании классов в языке C# используют модификаторы доступа, которые делятся на две категории:
- модификаторы, определяющие доступ ко всему классу в сборке и за ее пределами;
- модификаторы, определяющие доступ к члену (элементу) класса.
⇑
2. Модификаторы доступа для класса
Если в программе объявляется класс, то этот класс может иметь один из двух модификаторов доступа:
- public — в этом случае класс считается открытым. Он доступен любому коду любой сборки;
- internal — в этом случае класс считается доступным только в сборке, где он определен.
Модификатор доступа для класса ставится перед ключевым словом class:
access_modifier class ClassName { // ... }
здесь
- ClassName – имя класса;
- access_modifier – один из модификаторов доступа public или internal.
Класс можно объявлять без указания модификатора доступа. В этом случае, по умолчанию принимается internal модификатор для класса.
Например.
// Класс, который доступен за пределами сборки public class MyPublicClass { // ... } // Класс, который доступен только в пределах текущей сборки internal class MyInternalClass { // ... }
⇑
3. Модификаторы доступа для элемента (члена) класса
Если в классе объявляется элемент (метод, член данных и т.п.), то перед ним указывается модификатор доступа. Этот модификатор определяет уровень ограничения доступа к элементу класса. Язык C# предлагает следующие модификаторы доступа:
- private;
- protected;
- public;
- internal;
- protected internal.
Модификаторы доступа protected и protected internal используются при наследовании.
Элемент класса также может быть объявлен без модификатора. В этом случае принимается private уровень доступа к элементу класса.
⇑
4. Ключевое слово private. Особенности использования
Если в классе объявляется элемент (метод, член данных, ссылки и т.д.) с модификатором доступа private, то для него действуют следующие правила доступа:
- элемент недоступен любым экземплярам (объектам) класса (рисунок 1);
- элемент недоступен любым унаследованным классам (рисунок 2);
- элемент доступен методам класса в котором он объявлен (рисунок 3).
Рисунок 1. Модификатор доступа private. Нет доступа из экземпляра класса к private-элементу value
Рисунок 2. Модификатор доступа private. Нет доступа из унаследованного класса к private-элементу класа value
Рисунок 3. Модификатор доступа private. Доступ из внутренних методов класса к private-элементу
⇑
5. Ключевое слово public. Рисунок
При объявлении элемента класса с ключевым словом public действуют следующие правила:
- элемент считается доступным всем методам текущей сборки (рисунки 4, 5);
- элемент доступен из методов внешних сборок, если класс элемента объявлено как public. Если класс, с public-элементом объявлен как internal, то этот элемент не доступен из методов внешних сборок.
Рисунок 4. Модификатор доступа public. Доступ из экземпляра класса к public-члену класса value
Рисунок 5. Модификатор доступа public. Доступ из унаследованного класса
⇑
6. Ключевое слово protected. Рисунок
Если в классе объявляется элемент (метод, член данных и т.п.) с модификатором protected, то действуют следующие ограничения доступа:
- элемент недоступен из экземпляра класса (рисунок 6);
- элемент доступен из методов и вложенных классов, реализованных в текущем классе;
- элемент доступен из методов унаследованного класса (рисунок 7).
Рисунок 6. Модификатор доступа protected. Нет доступа из экземпляра класса
Рисунок 7. Модификатор доступа protected. Доступ из унаследованного класса
⇑
7. Ключевое слово internal. Рисунок
Если элемент (метод, член данных и т.д.) класса объявлен с ключевым словом internal, то действуют следующие правила доступа:
- элемент класса доступен из всех методов текущей сборки. В текущей сборке действие модификатора internal совпадает с действием модификатора public (смотрите рисунки 4, 5);
- элемент класса недоступен из методов других сборок (рисунок 8).
Рисунок 8. Модификатор доступа internal. Нет доступа из другой сборки
⇑
8. Модификатор доступа protected internal. Рисунок
Если в классе объявляется элемент с модификатором доступа protected internal, то действуют следующие правила:
- элемент класса доступен из всех методов текущей сборки. Здесь действует расширение модификатора internal (смотрите рисунок 9);
- элемент класса доступен из методов унаследованных классов независимо от сборки (рисунок 9). Здесь действует расширение модификатора protected. Классы могут быть унаследованы в других сборках;
- элемент класса недоступен из методов других сборок (экземпляров класса). Здесь действует ограничение модификатора internal (рисунок 10).
Рисунок 9. Доступ к переменной value из метода унаследованного класса B другой сборки App2
Рисунок 10. Нет доступа к value из экземпляра класса другой сборки
Конечно, чтобы из сборки App2 доступиться к сборке App1 нужно эту сборку предварительно подключить средствами Microsoft Visual Studio. Но это уже совсем другая тема…
⇑
Связанные темы
⇑