Condividi tramite


Dominio di accessibilità (Riferimenti per C#)

Aggiornamento: novembre 2007

Il dominio di accessibilità di un membro specifica in quali sezioni del programma è possibile fare riferimento al membro. Se il membro è nidificato 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 è dichiarato. Pertanto, il dominio include tutti i file di origine del progetto. Il dominio di accessibilità di un tipo nidificato corrisponde almeno al testo di programma del tipo in cui viene dichiarato, ossia corrisponde al corpo del tipo, inclusi tutti i tipi nidificati. Il dominio di accessibilità di un tipo nidificato 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 nidificate, 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; // CS0414

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

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

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

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

            // Error: inaccessible outside T1:
            //    T1.myPrivateInt = 3;  

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

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

            // Error: inaccessible outside M1:
            //    T1.M1.myPrivateInt = 3; 

            // Error: inaccessible outside T1:
            //    T1.M2.myPublicInt = 1;

            // Error: inaccessible outside T1:
            //    T1.M2.myInternalInt = 2;

            // Error: inaccessible outside M2:
            //    T1.M2.myPrivateInt = 3;
        }
    }
}

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:

  • 3.5.1 Accessibilità dichiarata

  • 3.5.2 Domini di accessibilità

  • 3.5.4 Vincoli di accessibilità

  • 10.3.5 Modificatori di accesso

  • 10.3.8.2 Accessibilità dichiarata

Vedere anche

Concetti

Guida per programmatori C#

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#)

Altre risorse

Riferimenti per C#