Модификатор 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,
который часто хранят в защищённых полях