Domena dostępności (odwołanie w C#)

Domena ułatwień dostępu elementu członkowskiego określa, do których sekcji programu można odwoływać się do składowych. Jeśli element członkowski jest zagnieżdżony w innym typie, jego domena ułatwień dostępu jest określana zarówno przez poziom ułatwień dostępu elementu członkowskiego, jak i domenę ułatwień dostępu natychmiast zawierającego typ.

Domena ułatwień dostępu typu najwyższego poziomu jest co najmniej tekstem programu projektu, w który jest zadeklarowany. Oznacza to, że domena zawiera wszystkie pliki źródłowe tego projektu. Domena ułatwień dostępu typu zagnieżdżonego to co najmniej tekst programu typu, w którym jest zadeklarowany. Oznacza to, że domena jest treścią typu, która zawiera wszystkie zagnieżdżone typy. Domena ułatwień dostępu typu zagnieżdżonego nigdy nie przekracza typu zawierającego. Te pojęcia przedstawiono w poniższym przykładzie.

Przykład

Ten przykład zawiera typ najwyższego poziomu, T1i dwie zagnieżdżone klasy M1 i M2. Klasy zawierają pola, które mają różne zadeklarowane możliwości dostępu. W metodzie Main komentarz jest zgodny z każdą instrukcją, aby wskazać domenę ułatwień dostępu każdego elementu członkowskiego. Zwróć uwagę, że instrukcje, które próbują odwoływać się do niedostępnych elementów członkowskich, są komentowane. Jeśli chcesz zobaczyć błędy kompilatora spowodowane odwoływaniem się do niedostępnego elementu członkowskiego, usuń komentarze pojedynczo.

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();
    }
}

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też