Zugriffsdomäne (C#-Referenz)

Die Zugriffsdomäne eines Members gibt an, in welchen Programmabschnitten auf einen Member verwiesen werden kann. Wenn der Member in einem anderen Typ geschachtelt ist, wird seine Zugriffsdomäne sowohl von der Zugriffsebene des Members als auch von der Zugriffsdomäne des unmittelbar enthaltenden Typs bestimmt.

Die Zugriffsdomäne eines Typs der obersten Ebene enthält mindestens den Programmtext des Projekts, in dem er deklariert wurde. Das heißt, die Domäne enthält alle Quelldateien dieses Projekts. Die Zugriffsdomäne eines geschachtelten Typs beinhaltet mindestens den Programmtext des Typs, in dem er deklariert wurde. Das bedeutet, dass die Domäne der Typtext ist, der alle geschachtelten Typen einschließt. Die Zugriffsdomäne eines geschachtelten Typs geht nie über die Zugriffsdomäne des enthaltenden Typs hinaus. Die Konzepte werden im nachstehenden Beispiel demonstriert.

Beispiel

Dieses Beispiel beinhaltet einen Typ der obersten Ebene, T1, und zwei geschachtelte Klassen, M1 und M2. Die Klassen enthalten Felder mit unterschiedlichen deklarierten Zugriffen. Bei der Main-Methode folgt jeder Anweisung ein Kommentar, der die Zugriffsdomäne jedes Members angibt. Beachten Sie, dass die Anweisungen, die auf die nicht zugreifbaren Member verweisen, auskommentiert sind. Wenn Sie die Compilerfehler anzeigen möchten, die durch Verweisen auf nicht zugreifbare Member verursacht werden, entfernen Sie jeden Kommentar einzeln.


namespace AccessibilityDomainNamespace
{
    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#-Programmiersprachenspezifikation

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

Siehe auch

Referenz

C#-Schlüsselwörter

Zugriffsmodifizierer (C#-Referenz)

Zugriffsebenen (C#-Referenz)

Einschränkungen bei der Verwendung von Zugriffsebenen (C#-Referenz)

Zugriffsmodifizierer (C#-Programmierhandbuch)

public (C#-Referenz)

private (C#-Referenz)

protected (C#-Referenz)

internal (C#-Referenz)

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz