Інкапсуляція в класах. Ключові слова 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. Але це вже зовсім інша тема…
⇑
Зв’язані теми
⇑