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

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

Два ключевых слова protected internal задают объединение правил: к члену можно обратиться, если вы находитесь в той же сборке, что и базовый тип, или если ваш класс наследует этот тип (даже в другой сборке). Это логическое ИЛИ между protected и internal.

Синтаксис

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

Пример

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

using System; class BaseHub { protected internal string token = "abcde"; } class ChildHub : BaseHub { public void Print() { Console.WriteLine(token); } } class Program { static void Main() { new ChildHub().Print(); } }

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

"abcde"

Пример

Давайте обратимся к protected internal методу из постороннего класса той же сборки (без наследования):

using System; class BaseHub { protected internal void Ping() { Console.WriteLine("ping"); } } class Caller { public void Run(BaseHub hub) { hub.Ping(); } } class Program { static void Main() { new Caller().Run(new BaseHub()); } }

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

"ping"

Пример

Класс в другой сборке, который не наследует базовый тип, не увидит protected internal член - фрагмент не компилируется:

// Сборка A: class BaseHub { protected internal void Ping() { } } // Сборка B (ссылка на A), без наследования: class Remote { static void Main() { new BaseHub().Ping(); } }

Доступ остаётся только у наследников или кода сборки A.

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

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