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

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

BeispielExample

Ein Member vom Typ „protected internal“ einer Basisklasse kann von jedem Typ innerhalb seiner enthaltenden Assembly aus zugegriffen werden.A protected internal member of a base class is accessible from any type within its containing assembly. 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.It is also accessible in a derived class located in another assembly only if the access occurs through a variable of 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
{
   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.This example contains two files, Assembly1.cs and Assembly2.cs. Die erste Datei enthält eine öffentliche Basisklasse, BaseClass, und eine weitere Klasse, TestAccess.The first file contains a public base class, BaseClass, and another class, TestAccess. BaseClass besitzt einen Member vom Typ „protected internal“, myValue, auf den über den Typ TestAccess zugegriffen wird.BaseClass owns a protected internal member, myValue, which is accessed by the TestAccess type. 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.In the second file, an attempt to access myValue through an instance of BaseClass will produce an error, while an access to this member through an instance of a derived class, DerivedClass will succeed.

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

C#-SprachspezifikationC# language specification

Weitere Informationen erhalten Sie unter C#-Sprachspezifikation.For more information, see the C# Language Specification. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.The language specification is the definitive source for C# syntax and usage.

Siehe auchSee also