protected (справочник по C#)

Ключевое слово protected является модификатором доступа к члену.

Примечание.

Эта страница содержит доступ protected. Ключевое слово protected также является частью модификаторов доступа protected internal и private protected.

Доступ к защищенному элементу может быть получен из соответствующего класса, а также экземплярами производных классов.

Сравнение модификатора protected с другими модификаторами доступа см. в разделе Уровни доступности.

Пример 1

Доступ к защищенному элементу базового класса может быть получен в производном классе, только если доступ осуществляется через тип производного класса. Для примера рассмотрим следующий сегмент кода:

class A
{
    protected int x = 123;
}

class B : A
{
    static void Main()
    {
        var a = new A();
        var b = new B();

        // Error CS1540, because x can only be accessed by
        // classes derived from A.
        // a.x = 10;

        // OK, because this class derives from A.
        b.x = 10;
    }
}

Оператор a.x = 10 вызывает ошибку, поскольку выполняется в статическом методе Main, а не в экземпляре класса Б.

Элементы структуры защитить нельзя, поскольку структура не может наследоваться.

Пример 2

В этом примере класс DerivedPoint является производным от класса Point. В связи с этим доступ к защищенным элементам базового класса можно получить напрямую из производного класса.

class Point
{
    protected int x;
    protected int y;
}

class DerivedPoint: Point
{
    static void Main()
    {
        var dpoint = new DerivedPoint();

        // Direct access to protected members.
        dpoint.x = 10;
        dpoint.y = 15;
        Console.WriteLine($"x = {dpoint.x}, y = {dpoint.y}");
    }
}
// Output: x = 10, y = 15

Если изменить уровни доступа x и y на private, компилятор выдаст сообщения об ошибках:

'Point.y' is inaccessible due to its protection level.

'Point.x' is inaccessible due to its protection level.

Спецификация языка C#

Дополнительные сведения см. в разделе Объявленная доступность в Спецификации языка C#. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.

См. также