Condividi tramite


Dominio di accessibilità (riferimenti per C#)

Il dominio di accessibilità di un membro specifica le sezioni del programma in cui è possibile fare riferimento a tale membro. Se il membro è annidato all'interno di un altro tipo, sia il livello di accessibilità del membro che il dominio di accessibilità del tipo che lo contiene immediatamente determinano il dominio di accessibilità.

Il riferimento al linguaggio C# documenta la versione rilasciata più di recente del linguaggio C#. Contiene anche la documentazione iniziale per le funzionalità nelle versioni di anteprima pubblica per la prossima versione del linguaggio di programmazione.

La documentazione identifica tutte le funzionalità introdotte nelle ultime tre versioni della lingua o nelle anteprime pubbliche correnti.

Suggerimento

Per trovare quando una funzionalità è stata introdotta per la prima volta in C#, vedere l'articolo sulla cronologia delle versioni del linguaggio C#.

Il dominio di accessibilità di un tipo di primo livello include sempre almeno il testo del programma del progetto in cui viene dichiarato. In altre parole, il dominio include tutti i file di origine nel progetto. Il dominio di accessibilità di un tipo annidato include sempre almeno il testo del programma del tipo in cui viene dichiarato. In altre parole, il dominio è il corpo del tipo, che include tutti i tipi annidati. Il dominio di accessibilità di un tipo annidato non supera mai quello del tipo contenitore. Nell'esempio seguente vengono illustrati questi concetti.

Questo esempio contiene un tipo di primo livello, T1, e due classi annidate e M1M2. Le classi contengono campi con diverse accessibilità dichiarate. Main Nel metodo un commento segue ogni istruzione per indicare il dominio di accessibilità di ogni membro. Le istruzioni che tentano di fare riferimento ai membri inaccessibili vengono impostate come commento. Se si desidera visualizzare gli errori del compilatore causati dal riferimento a un membro inaccessibile, rimuovere i commenti uno alla volta.

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 altre informazioni, vedere la specifica del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.

Vedere anche