Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The protected
keyword is a member access modifier.
Note
This page covers protected
access. 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.
For a comparison of protected
with the other access modifiers, see Accessibility Levels.
Example 1
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 through
// the derived class type, not through the base class type.
// a.x = 10;
// OK, because this class derives from A.
b.x = 10;
}
}
The statement a.x = 10
generates an error because it accesses the protected member through a base class reference (a
is of type A
). Protected members can only be accessed through the derived class type or types derived from it.
Struct members cannot be protected because the struct cannot be inherited.
Example 2
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
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# language specification
For more information, see Declared accessibility in the C# Language Specification. The language specification is the definitive source for C# syntax and usage.