Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1067 of 1492 menu
◀ ▶

Модификатор private protected

Ключевые слова private protected задают пересечение правил: член виден только в производном классе и только если он компилируется в той же сборке, что и базовый тип. Посторонний код даже в той же сборке не получит доступ, в отличие от protected internal.

Синтаксис

private protected тип поле; private protected тип Метод() { }

Пример

Давайте прочитаем private protected поле в наследнике той же сборки:

using System; class BaseGate { private protected int level = 3; } class ChildGate : BaseGate { public void Print() { Console.WriteLine(level); } } class Program { static void Main() { new ChildGate().Print(); } }

Результат выполнения кода:

3

Пример

Давайте вызовем private protected метод из другого наследника в той же сборке:

using System; class BaseGate { private protected string GetCode() { return "12345"; } } class ChildGate : BaseGate { public void Show() { Console.WriteLine(GetCode()); } } class Program { static void Main() { new ChildGate().Show(); } }

Результат выполнения кода:

"12345"

Пример

Посторонний класс той же сборки не видит private protected член; наследник в другой сборке тоже - оба варианта не компилируются:

class BaseGate { private protected int level = 3; } class Stranger { static void Main() { var gate = new BaseGate(); Console.WriteLine(gate.level); } }

Нужны и наследование, и общая сборка с BaseGate.

Смотрите также

  • модификатор protected internal,
    который расширяет доступ до всей сборки
  • модификатор protected,
    который не привязан к сборке
  • модификатор private,
    который скрывает член только в типе
  • тип string,
    который часто хранят в защищённых полях
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить