Freigeben über


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#.

Siehe auch