Teilen über


private protected (C#-Referenz)

Die private protected Schlüsselwortkombination ist ein Mitgliedzugriffsmodifizierer. Typen, die von der Klasse abgeleitet werden und in der enthaltenden Assembly deklariert werden, können auf ein privates geschütztes Element zugreifen. Einen Vergleich mit private protected den anderen Zugriffsmodifizierern finden Sie unter Barrierefreiheitsstufen.

Die C#-Sprachreferenz dokumentiert die zuletzt veröffentlichte Version der C#-Sprache. Außerdem enthält sie eine erste Dokumentation zu Funktionen in der öffentlichen Vorschau für die kommende Sprachversion.

In der Dokumentation werden alle Features identifiziert, die in den letzten drei Versionen der Sprache oder in der aktuellen öffentlichen Vorschau eingeführt wurden.

Tipp

Informationen dazu, wann ein Feature erstmals in C# eingeführt wurde, finden Sie im Artikel zum Versionsverlauf der C#-Sprache.

Abgeleitete Typen können nur dann auf ein privates geschütztes Element einer Basisklasse in der zugehörigen Assembly zugreifen, wenn der statische Typ der Variablen der abgeleitete Klassentyp ist. Betrachten Sie beispielsweise das folgende Codesegment:

// Assembly1.cs
// Compile with: /target:library
public class BaseClass
{
    private protected int myValue = 0;
}

public class DerivedClass1 : BaseClass
{
    void Access()
    {
        var baseObject = new BaseClass();

        // Error CS1540, because myValue can only be accessed by
        // classes derived from BaseClass.
        // baseObject.myValue = 5;

        // OK, accessed through the current derived class instance
        myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass2 : BaseClass
{
    void Access()
    {
        // Error CS0122, because myValue can only be
        // accessed by types in Assembly1
        // myValue = 10;
    }
}

Dieses Beispiel enthält zwei Dateien Assembly1.cs und Assembly2.cs. Die erste Datei enthält eine öffentliche Basisklasse und BaseClasseinen daraus abgeleiteten Typ. DerivedClass1 BaseClass besitzt ein privates geschütztes Mitglied, myValue, auf das DerivedClass1 innerhalb derselben Assembly als geerbtes Mitglied zugreifen kann.

In der zweiten Datei erzeugt ein Versuch, als geerbtes Element von DerivedClass2 einem Fehler darauf zuzugreifenmyValue, da private protected Member nur von abgeleiteten Typen innerhalb derselben Assembly zugänglich sind. Diese Einschränkung ist der hauptunterschied zu protected (der den Zugriff von abgeleiteten Klassen in jeder Assembly zulässt) und protected internal (die den Zugriff von einer beliebigen Klasse innerhalb derselben Assembly oder abgeleiteter Klassen in jeder Assembly ermöglicht).

Wenn Assembly1.cs diese InternalsVisibleToAttribute Namen Assembly2enthalten sind, hat die abgeleitete Klasse DerivedClass2 Zugriff auf private protected member, die in BaseClassdeklariert sind. InternalsVisibleTo macht private protected Mitglieder für abgeleitete Klassen in anderen Assemblies sichtbar.

Vergleich mit anderen geschützten Zugriffsmodifizierern

In der folgenden Tabelle sind die wichtigsten Unterschiede zwischen den drei geschützten Zugriffsmodifizierern zusammengefasst:

Zugriffsmodifizierer Dieselbe Assembly, abgeleitete Klasse Gleiche Assembly, nicht abgeleitete Klasse Andere Assembly, abgeleitete Klasse
protected ✔️ ✔️
protected internal ✔️ ✔️ ✔️
private protected ✔️
  • Verwenden Sie diese Vorgehensweise protected , wenn abgeleitete Klassen in einer Assembly auf das Element zugreifen sollen.
  • Verwenden Sie protected internal diese Eigenschaft, wenn Sie den zulässigsten Zugriff wünschen (beliebige Klassen in derselben Assembly oder abgeleiteten Klassen an einer beliebigen Stelle).
  • Verwenden Sie private protected diesen Vorgang, wenn Sie den restriktivsten geschützten Zugriff wünschen (nur abgeleitete Klassen in derselben Assembly).

Sie können Strukturmmber nicht deklarieren private protected , da Strukturen nicht geerbt werden können.

C#-Sprachspezifikation

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation. Die Sprachspezifikation ist die endgültige Quelle für C#-Syntax und -Verwendung.

Siehe auch