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
- Справочник по C#C# Reference
- Руководство по программированию на C#C# Programming Guide
- Ключевые слова в C#C# Keywords
- Модификаторы доступаAccess Modifiers
- Уровни доступностиAccessibility Levels
- МодификаторыModifiers
- publicpublic
- privateprivate
- internalinternal
- Вопросы безопасности, связанные с использованием ключевых слов internal virtualSecurity concerns for internal virtual keywords