Condividi tramite


Dominio di accessibilità (Riferimenti per C#)

Il dominio di accessibilità di un membro specifica in quali sezioni del programma è possibile fare riferimento al membro.Se il membro è annidato in un altro tipo, il dominio di accessibilità dipenderà sia dal livello di accessibilità del membro che dal dominio di accessibilità del tipo che lo contiene direttamente.

Il dominio di accessibilità di un tipo di primo livello corrisponde almeno al testo di programma del progetto in cui viene dichiarato.Ovvero, il dominio include tutti i file di origine di questo progetto.Il dominio di accessibilità di un tipo annidato corrisponde almeno al testo di programma del tipo in cui viene dichiarato,ossia corrisponde al corpo del tipo, inclusi tutti i tipi annidati.Il dominio di accessibilità di un tipo annidato non è mai più ampio di quello del tipo che lo contiene.Questi concetti sono illustrati nell'esempio che segue.

Esempio

In questo esempio viene utilizzato un tipo di primo livello T1 e due classi annidate, M1 e M2.Le classi contengono campi con accessibilità dichiarate differenti.Nel metodo Main, ciascuna istruzione è seguita da un commento per indicare il dominio di accessibilità di ciascun membro.Si noti che le istruzioni che tentano di fare riferimento ai membri non accessibili vengono impostate come commenti.Per visualizzare gli errori del compilatore provocati da riferimenti a un membro inaccessibile, rimuovere i commenti uno alla volta.


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

        }
    }
}

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Vedere anche

Riferimenti

Parole chiave di C#

Modificatori di accesso (Riferimenti per C#)

Livelli di accessibilità (Riferimenti per C#)

Restrizioni relative all'utilizzo dei livelli di accessibilità (Riferimenti per C#)

Modificatori di accesso (Guida per programmatori C#)

public (Riferimenti per C#)

private (Riferimenti per C#)

protected (Riferimenti per C#)

internal (Riferimenti per C#)

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#