protected internal (C#-Referenz)

Die Schlüsselwortkombination protected internal ist ein Zugriffsmodifizierer für Member. Ein Member vom Typ „protected internal“ kann von der aktuellen Assembly oder von Typen aus zugegriffen werden, die von der enthaltenden Klasse abgeleitet werden. Einen Vergleich von protected internal mit den anderen Zugriffsmodifizierern finden Sie unter Zugriffsebenen.

Beispiel

Ein Member vom Typ „protected internal“ einer Basisklasse kann von jedem Typ innerhalb seiner enthaltenden Assembly aus zugegriffen werden. Sie kann auch von einer abgeleiteten Klasse zugegriffen werden, die sich in einer anderen Assembly befindet, jedoch nur, wenn der Zugriff über eine Variable des abgeleiteten Klassentyps erfolgt. Sehen Sie sich z.B. folgenden Codeabschnitt an:

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

class TestAccess
{
    void Access()
    {
        var baseObject = new BaseClass();
        baseObject.myValue = 5;
    }
}
// Assembly2.cs
// Compile with: /reference:Assembly1.dll
class DerivedClass : BaseClass
{
    static void Main()
    {
        var baseObject = new BaseClass();
        var derivedObject = new DerivedClass();

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

        // OK, because this class derives from BaseClass.
        derivedObject.myValue = 10;
    }
}

Dieses Beispiel enthält zwei Dateien, Assembly1.cs und Assembly2.cs. Die erste Datei enthält eine öffentliche Basisklasse, BaseClass, und eine weitere Klasse, TestAccess. BaseClass besitzt einen Member vom Typ „protected internal“, myValue, auf den über den Typ TestAccess zugegriffen wird. In der zweiten Datei verursacht ein Versuch, über eine BaseClass-Instanz auf myValue zuzugreifen, einen Fehler, während ein Zugriff auf diesen Member über eine Instanz einer abgeleiteten Klasse DerivedClass gelingt.

Strukturmember können nicht vom Typ protected internal sein, da die Struktur nicht vererbt werden kann.

C#-Sprachspezifikation

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

Siehe auch