Zugriffsdomäne (C#-Referenz)Accessibility Domain (C# Reference)

Die Zugriffsdomäne eines Members gibt an, in welche Teile des Programms ein Member verwiesen werden kann.The accessibility domain of a member specifies in which program sections a member can be referenced. Wenn der Member in einem anderen Typ geschachtelt ist, wird seine Zugriffsdomäne sowohl durch das Zugriffslevel des Members als auch durch die Zugriffsdomäne des direkt enthaltenden Typs bestimmt.If the member is nested within another type, its accessibility domain is determined by both the accessibility level of the member and the accessibility domain of the immediately containing type.

Die Zugriffsdomäne eines Typs der obersten Ebene ist mindestens der Programmtext des Projekts, in dem er deklariert ist.The accessibility domain of a top-level type is at least the program text of the project that it is declared in. Das bedeutet, dass die Domäne alle Quelldateien des Projekts enthält.That is, the domain includes all of the source files of this project. Die Zugriffsdomäne eines geschachtelten Typs ist mindestens der Programmtext des Typs, in dem er deklariert ist.The accessibility domain of a nested type is at least the program text of the type in which it is declared. Das bedeutet, dass die Domäne der Typkörper ist, der alle geschachtelten Typen enthält.That is, the domain is the type body, which includes all nested types. Die Zugriffsdomäne eines geschachtelten Typs geht nie über die des enthaltenden Typs hinaus.The accessibility domain of a nested type never exceeds that of the containing type. Diese Konzepte werden im folgenden Beispiel dargestellt.These concepts are demonstrated in the following example.

BeispielExample

Dieses Beispiel enthält einen Typ der obersten Ebene T1, und zwei geschachtelte Klassen M1 und M2.This example contains a top-level type, T1, and two nested classes, M1 and M2. Die Klassen enthalten Felder mit unterschiedlichen deklarierten Zugriffen.The classes contain fields that have different declared accessibilities. In der Main-Methode folgt jeder Anweisung ein Kommentar, der die Zugriffsdomäne jedes Members angibt.In the Main method, a comment follows each statement to indicate the accessibility domain of each member. Beachten Sie, dass die Anweisungen, die versuchen, auf die Member zu verweisen, auf die nicht zugegriffen werden kann, auskommentiert werden. Wenn Sie die Compilerfehler anzeigen möchten, die durch Verweisen auf einen Member verursacht werden, auf den nicht zugegriffen werden kann, entfernen Sie die Kommentare nacheinander.Notice that the statements that try to reference the inaccessible members are commented out. If you want to see the compiler errors caused by referencing an inaccessible member, remove the comments one at a time.


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#-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#-ReferenzC# Reference
C#-ProgrammierhandbuchC# Programming Guide
C#-SchlüsselwörterC# Keywords
ZugriffsmodifiziererAccess Modifiers
ZugriffsebenenAccessibility Levels
Einschränkungen bei der Verwendung von ZugriffsebenenRestrictions on Using Accessibility Levels
ZugriffsmodifiziererAccess Modifiers
publicpublic
privateprivate
protectedprotected
internalinternal