7.2 Правила доступу protected. Слiд зауважити, що у випадку коли ви не вказуєте модифiкатор доступу, за замовчуванням для членiв класу встановлюється рiвень доступуprivate, а для типiв, що не є членами iнших типiв – internal. Для членiв типiв, вiдмiнних вiд класiв дiють окремi правила визначення рiвня доступу за замовчуванням.
Розглянемо такий приклад.
public class Example
{ int A; // оголошено змiну цiлого типу, як private private int B; // поле доступно лише iз цього класу protected int C; // поле доступно iз цього класу та класiв нащадкiв internal int D; // поле доступно з будь-якого мiсця збiрки protected internal int E; // доступно з будь-якого мiсця збiрки й з класiв нащадкiв public int F; // доступно з будь-якого мiсця збiрки, а також з iнших збiрок
} private void WriteConsoleF() {
Console. WriteLine(" Поле F має значення = { 0 }", F);
}
public void WriteConsoleA() {
Console. WriteLine(" Поле A має значення = { 0 }", A);
}
internal void WriteConsoleB() {
Console. WriteLine(" Поле B має значення = { 0 }", B);
}
protected void WriteConsoleE() {
Console. WriteLine(" Поле E має значення = { 0 }", E);
}
Розглянемо, як буде виконуватись доступ до полiв та як будуть викликатись методи. Напишемо головну програму, або клас. Будемо звертатись до поля, використовуючи iм’ я test екземпляру класу Example. Маємо:
class Program
{ static void Main( string [] args) { Example test = new Example(); test. a = 4; // Помилка, отримати доступ не можна test. b = 3; // Помилка, отримати доступ не можна test. c = 1; /* Помилка, отриматидоступнеможначерезте, щоклас
Program неєнащадкомкласу Example */ test. d = 5; // поле d доступно з будь-якого мiсця збiрки. Помилки немає.
113