private protected (C#-Referenz)private protected (C# Reference)

Die Schlüsselwortkombination private protected ist ein Zugriffsmodifizierer für Member.The private protected keyword combination is a member access modifier. Ein Member vom Typ „private protected“ kann von der von Typen aus zugegriffen werden, die von der enthaltenden Klasse abgeleitet werden, jedoch nur innerhalb der enthaltenden Assembly.A private protected member is accessible by types derived from the containing class, but only within its containing assembly. Einen Vergleich von private protected mit den anderen Zugriffsmodifizierern finden Sie unter Zugriffsebenen.For a comparison of private protected with the other access modifiers, see Accessibility Levels.

BeispielExample

Ein Member vom Typ „private protected“ einer Basisklasse kann nur dann von abgeleiteten Typen innerhalb seiner enthaltenden Assembly aus zugegriffen werden, wenn der statische Typ der Variable der abgeleitete Klassentyp ist.A private protected member of a base class is accessible from derived types in its containing assembly only if the static type of the variable is the derived class type. Sehen Sie sich z.B. folgenden Codeabschnitt an:For example, consider the following code segment:

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

public class DerivedClass1 : BaseClass
{
    void Access()
    {
        BaseClass 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.This example contains two files, Assembly1.cs and Assembly2.cs. Die erste Datei enthält eine öffentliche Basisklasse, BaseClass, und einen davon abgeleiteten Typ, DerivedClass1.The first file contains a public base class, BaseClass, and a type derived from it, DerivedClass1. BaseClass besitzt einen Member vom Typ „private protected“, myValue, auf den DerivedClass1 auf zwei Arten zuzugreifen versucht.BaseClass owns a private protected member, myValue, which DerivedClass1 tries to access in two ways. Der erste Versuch, über eine Instanz von BaseClass auf myValue zuzugreifen, führt zu einem Fehler.The first attempt to access myValue through an instance of BaseClass will produce an error. Der Versuch, es als geerbten Member in DerivedClass1 zu verwenden, gelingt jedoch.However, the attempt to use it as an inherited member in DerivedClass1 will succeed. In der zweiten Datei wird ein Versuch, auf myValue als geerbtes Mitglied von DerivedClass2 zuzugreifen, einen Fehler erzeugen, da nur von abgeleiteten Typen in Assembly1 darauf zugegriffen werden kann.In the second file, an attempt to access myValue as an inherited member of DerivedClass2 will produce an error, as it is only accessible by derived types in Assembly1.

Strukturmember können nicht vom Typ private protected sein, da die Struktur nicht vererbt werden kann.Struct members cannot be private protected because the struct cannot be inherited.

C#-ProgrammiersprachenspezifikationC# Language Specification

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

Siehe auchSee Also

C#-Referenz C# Reference
C#-Programmierhandbuch C# Programming Guide
C#-Schlüsselwörter C# Keywords
Zugriffsmodifizierer Access Modifiers
Zugriffsebenen Accessibility Levels
Modifizierer Modifiers
Public public
Private private
internal internal
Sicherheitsaspekte für interne virtuelle SchlüsselwörterSecurity concerns for internal virtual keywords