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

Ключевое слово protected является модификатором доступа к члену.The protected keyword is a member access modifier.

Примечание

Эта страница содержит доступ protected.This page covers protected access. Ключевое слово protected также является частью модификаторов доступа protected internal и private protected.The protected keyword is also part of the protected internal and private protected access modifiers.

Доступ к защищенному элементу может быть получен из соответствующего класса, а также экземплярами производных классов.A protected member is accessible within its class and by derived class instances.

Сравнение модификатора protected с другими модификаторами доступа см. в разделе Уровни доступности.For a comparison of protected with the other access modifiers, see Accessibility Levels.

ПримерExample

Доступ к защищенному элементу базового класса может быть получен в производном классе, только если доступ осуществляется через тип производного класса.A protected member of a base class is accessible in a derived class only if the access occurs through the derived class type. Для примера рассмотрим следующий сегмент кода:For example, consider the following code segment:

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, а не в экземпляре класса Б.The statement a.x = 10 generates an error because it is made within the static method Main, and not an instance of class B.

Элементы структуры защитить нельзя, поскольку структура не может наследоваться.Struct members cannot be protected because the struct cannot be inherited.

ПримерExample

В этом примере класс DerivedPoint является производным от класса Point.In this example, the class DerivedPoint is derived from Point. В связи с этим доступ к защищенным элементам базового класса можно получить напрямую из производного класса.Therefore, you can access the protected members of the base class directly from the derived class.

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, компилятор выдаст сообщения об ошибках:If you change the access levels of x and y to private, the compiler will issue the error messages:

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

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

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

Дополнительные сведения см. в разделе Объявленная доступность в Спецификации языка C#.For more information, see Declared accessibility in the C# Language Specification. Спецификация языка является предписывающим источником информации о синтаксисе и использовании языка C#.The language specification is the definitive source for C# syntax and usage.

См. такжеSee also