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-элементу

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

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

Рисунок 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#. Модификатор protected internal. Доступ к переменной из метода унаследованного класса другой сборки

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

 

C#. Модификатор protected internal. Нет доступа к переменной из экземпляра класса другой сборки

Рисунок 10. Нет доступа к value из экземпляра класса другой сборки

Конечно, чтобы из сборки App2 доступиться к сборке App1 нужно эту сборку предварительно подключить средствами Microsoft Visual Studio. Но это уже совсем другая тема…

 


Связанные темы