Freigeben über


Barrierefreiheitsdomäne (C#-Referenz)

Die Barrierefreiheitsdomäne eines Mitglieds gibt die Programmabschnitte an, in denen Sie auf dieses Mitglied verweisen können. Wenn das Mitglied innerhalb eines anderen Typs geschachtelt ist, bestimmen sowohl die Barrierefreiheitsebene des Mitglieds als auch die Barrierefreiheitsdomäne des unmittelbar enthaltenden Typs die Barrierefreiheitsdomäne.

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.

Die Barrierefreiheitsdomäne eines Typs der obersten Ebene enthält immer mindestens den Programmtext des Projekts, in dem Sie es deklarieren. Mit anderen Worten, die Domäne enthält alle Quelldateien im Projekt. Die Barrierefreiheitsdomäne eines geschachtelten Typs enthält immer mindestens den Programmtext des Typs, in dem Sie ihn deklarieren. Mit anderen Worten, die Domäne ist der Typtext, der alle geschachtelten Typen enthält. Die Barrierefreiheitsdomäne eines geschachtelten Typs überschreitet niemals den des enthaltenden Typs. Im folgenden Beispiel werden diese Konzepte veranschaulicht.

Dieses Beispiel enthält einen Typ der obersten Ebene und T1zwei geschachtelte Klassen M1 und M2. Die Klassen enthalten Felder, die unterschiedliche deklarierte Accessibilitäten aufweisen. In der Main Methode folgt ein Kommentar jeder Anweisung, um die Barrierefreiheitsdomäne jedes Mitglieds anzugeben. Die Anweisungen, die versuchen, auf die nicht zugänglichen Member zu verweisen, werden auskommentiert. Wenn Sie die Compilerfehler anzeigen möchten, die durch Verweisen auf ein nicht zugängliches Element verursacht werden, entfernen Sie die Kommentare einzeln.

public class T1
{
    public static int publicInt;
    internal static int internalInt;
    private static int privateInt = 0;

    static T1()
    {
        // T1 can access public or internal members
        // in a public or private (or internal) nested class.
        M1.publicInt = 1;
        M1.internalInt = 2;
        M2.publicInt = 3;
        M2.internalInt = 4;

        // Cannot access the private member privateInt
        // in either class:
        // M1.privateInt = 2; //CS0122
    }

    public class M1
    {
        public static int publicInt;
        internal static int internalInt;
        private static int privateInt = 0;
    }

    private class M2
    {
        public static int publicInt = 0;
        internal static int internalInt = 0;
        private static int privateInt = 0;
    }
}

class MainClass
{
    static void Main()
    {
        // Access is unlimited.
        T1.publicInt = 1;

        // Accessible only in current assembly.
        T1.internalInt = 2;

        // Error CS0122: inaccessible outside T1.
        // T1.privateInt = 3;

        // Access is unlimited.
        T1.M1.publicInt = 1;

        // Accessible only in current assembly.
        T1.M1.internalInt = 2;

        // Error CS0122: inaccessible outside M1.
        //    T1.M1.privateInt = 3;

        // Error CS0122: inaccessible outside T1.
        //    T1.M2.publicInt = 1;

        // Error CS0122: inaccessible outside T1.
        //    T1.M2.internalInt = 2;

        // Error CS0122: inaccessible outside M2.
        //    T1.M2.privateInt = 3;

        // Keep the console open in debug mode.
        System.Console.WriteLine("Press any key to exit.");
        System.Console.ReadKey();
    }
}

C#-Sprachspezifikation

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

Siehe auch