Partager via


Domaine d’accessibilité (référence C#)

Le domaine d’accessibilité d’un membre spécifie les sections du programme dans lesquelles vous pouvez référencer ce membre. Si le membre est imbriqué dans un autre type, le niveau d’accessibilité du membre et le domaine d’accessibilité du type contenant immédiatement déterminent son domaine d’accessibilité.

La documentation de référence du langage C# décrit la version la plus récente du langage C#. Il contient également la documentation initiale des fonctionnalités dans les préversions publiques pour la prochaine version du langage.

La documentation identifie toute fonctionnalité introduite en premier dans les trois dernières versions de la langue ou dans les préversions publiques actuelles.

Conseil / Astuce

Pour savoir quand une fonctionnalité a été introduite en C#, consultez l’article sur l’historique des versions du langage C#.

Le domaine d’accessibilité d’un type de niveau supérieur inclut toujours au moins le texte du programme du projet où vous le déclarez. En d’autres termes, le domaine inclut tous les fichiers sources dans le projet. Le domaine d’accessibilité d’un type imbriqué inclut toujours au moins le texte du programme du type où vous le déclarez. En d’autres termes, le domaine est le corps du type, qui inclut tous les types imbriqués. Le domaine d’accessibilité d’un type imbriqué ne dépasse jamais celui du type conteneur. L’exemple suivant illustre ces concepts.

Cet exemple contient un type de niveau supérieur, T1et deux classes imbriquées, M1 et M2. Les classes contiennent des champs qui ont des accessibilités déclarées différentes. Dans la Main méthode, un commentaire suit chaque instruction pour indiquer le domaine d’accessibilité de chaque membre. Les instructions qui tentent de référencer les membres inaccessibles sont commentées. Si vous souhaitez voir les erreurs du compilateur provoquées par le référencement d’un membre inaccessible, supprimez les commentaires un par un.

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

Spécification du langage C#

Pour plus d'informations, voir la spécification du langage C#. La spécification du langage est la source de référence pour la syntaxe C# et son utilisation.

Voir aussi