C#. Інкапсуляція в класах. Ключові слова private, protected, public, internal




Інкапсуляція в класах. Ключові слова private, protected, public, 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).

 

C#. Модифікатор доступу private. Немає доступу з екземпляру класу до private-елементу класу value

Рисунок 1. Модифікатор доступу private. Немає доступу з екземпляру класу до private-елементу класу value

 

C#. Модифікатор доступу private. Немає доступу з успадкованого класу до private-елементу класу value

Рисунок 2. Модифікатор доступу private. Немає доступу з успадкованого класу до private-елементу класу value

C#. Модифікатор доступу private. Доступ з внутрішніх методів класу до private-елементу

Рисунок 3. Модифікатор доступу private. Доступ з внутрішніх методів класу до private-елементу

 

5. Ключове слово public. Рисунок

При оголошенні елементу класу з ключовим словом public діють наступні правила:

  • елемент вважається доступним усім методам поточної збірки (рисунки 4, 5);
  • елемент доступний з методів зовнішніх збірок, якщо клас елементу оголошено як public. Якщо клас, з public-елементом оголошено як internal, то цей елемент не є доступний з методів зовнішніх збірок.

C#. Модифікатор доступу public. Доступ з екземпляру класу до public-члена класу

Рисунок 4. Модифікатор доступу public. Доступ з екземпляру класу до public-члена класу value

C#. Модифікатор доступу public. Доступ з успадкованого класу

Рисунок 5. Модифікатор доступу public. Доступ з успадкованого класу

 

6. Ключове слово protected. Рисунок

Якщо в класі оголошується елемент (метод, член даних тощо) з модифікатором protected, то діють наступні обмеження доступу:

  • елемент недоступний з екземпляру класу (рисунок 6);
  • елемент доступний з методів та вкладених класів, що реалізовані в поточному класі;
  • елемент доступний з методів успадкованого класу (рисунок 7).

 

C#. Модифікатор доступу protected. Немає доступу з екземпляру класу

Рисунок 6. Модифікатор доступу protected. Немає доступу з екземпляру класу

 

C#. Модифікатор доступу protected. Доступ з успадкованого класу

Рисунок 7. Модифікатор доступу protected. Доступ з успадкованого класу

 

7. Ключове слово internal. Рисунок

Якщо елемент (метод, член даних тощо) класу оголошено з ключовим словом internal, то діють наступні правила доступу:

  • елемент класу доступний з усіх методів поточної збірки. В поточній збірці дія модифікатора internal співпадає з дією модифікатора public (дивіться рисунки 4, 5);
  • елемент класу недоступний з методів інших збірок (рисунок 8).

 

C#. Модифікатор доступу internal. Немає доступу з іншої збірки

Рисунок 8. Модифікатор доступу internal. Немає доступу з іншої збірки

 

8. Модифікатор доступу protected internal. Рисунок

Якщо в класі оголошується елемент з модифікатором доступу protected internal, то діють наступні правила:

  • елемент класу є доступний з усіх методів поточної збірки. Тут діє розширення модифікатора internal (дивіться рисунок 9);
  • елемент класу є доступний з методів успадкованих класів незалежно від збірки (рисунок 9). Тут діє розширення модифікатору protected. Класи можуть бути успадковані в інших збірках;
  • елемент класу є недоступний з методів інших збірок (екземплярів класу). Тут діє обмеження модифікатора internal (рисунок 10).

 

C#. Доступ до змінної value з методу успадкованого класу іншої збірки

Рисунок 9. Доступ до змінної value з методу успадкованого класу B іншої збірки App2

C#. Немає доступу до value з екземпляру класу іншої збірки

Рисунок 10. Немає доступу до value з екземпляру класу іншої збірки

Звичайно, щоб зі збірки App2 доступитись до збірки App1 потрібно цю збірку попередньо підключити засобами Microsoft Visual Studio. Але це вже зовсім інша тема…

 


Зв’язані теми