protected (C#-Referenz)
Das protected
-Schlüsselwort ist ein Zugriffsmodifizierer für Member.
Hinweis
Auf dieser Seite wird der Zugriff auf protected
behandelt. Das Schlüsselwort protected
ist auch Teil der Zugriffsmodifizierer protected internal
und private protected
.
Auf einen geschützten Member kann innerhalb seiner Klasse und von Instanzen abgeleiteter Klasse zugegriffen werden.
Einen Vergleich von protected
mit den anderen Zugriffsmodifizierern finden Sie unter Zugriffsebenen.
Beispiel 1
Auf einen geschützten Member einer Basisklasse kann in einer abgeleiteten Klasse zugegriffen werden, nur wenn der Zugriff über den Typ der abgeleiteten Klasse erfolgt. Sehen Sie sich z.B. folgenden Codeabschnitt an:
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;
}
}
Die Anweisung a.x = 10
generiert einen Fehler, da sie innerhalb der statischen Main-Methode erstellt wird und keine Instanz der Klasse B ist.
Strukturmember können nicht geschützt werden, da die Struktur nicht vererbt werden kann.
Beispiel 2
In diesem Beispiel wird die DerivedPoint
-Klasse von Point
abgeleitet. Daher können Sie direkt von der abgeleiteten Klasse auf die geschützten Member der Basisklasse zugreifen.
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
Wenn Sie die Zugriffsebenen von x
und y
auf private ändern, wird der Compiler die Fehlermeldungen anzeigen:
'Point.y' is inaccessible due to its protection level.
'Point.x' is inaccessible due to its protection level.
C#-Sprachspezifikation
Weitere Informationen finden Sie unter Deklarierte Barrierefreiheit in der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.