Partager via


Types imbriqués (Guide de programmation C#)

Un type défini dans une classe, un struct ou une interface est appelé type imbriqué. Par exemple

public class Container
{
    class Nested
    {
        Nested() { }
    }
}

Que le type externe soit une classe, une interface ou un struct, les types imbriqués par défaut sont privés ; ils sont accessibles uniquement à partir de leur type contenant. Dans l’exemple précédent, la classe Nested est inaccessible aux types externes.

Vous pouvez également spécifier un modificateur d’accès pour définir l’accessibilité d’un type imbriqué, comme suit :

  • Les types imbriqués d’une classe peuvent être publics, protégés, internes, protégés internes, privés ou privés.

    Toutefois, définir une protected, protected internal ou private protected classe imbriquée à l'intérieur d'une classe scellée génère l'avertissement du compilateur CS0628, « nouveau membre protégé déclaré dans une classe scellée ».

    Sachez également que rendre un type imbriqué visible en externe enfreint la règle de qualité du code CA1034 « Les types imbriqués ne doivent pas être visibles ».

  • Les types imbriqués d’un struct peuvent être publics, internes ou privés.

L’exemple suivant rend la classe Nested publique :

public class Container
{
    public class Nested
    {
        Nested() { }
    }
}

Le type imbriqué, ou intérieur, peut accéder au type conteneur, ou extérieur. Pour accéder au type conteneur, transmettez-le en tant qu’argument au constructeur du type imbriqué. Par exemple:

public class Container
{
    public class Nested
    {
        private Container? parent;

        public Nested()
        {
        }
        public Nested(Container parent)
        {
            this.parent = parent;
        }
    }
}

Un type imbriqué a accès à tous les membres qui sont accessibles à son type conteneur. Il peut accéder aux membres privés et protégés du type conteneur, y compris à tous les membres protégés hérités.

Dans la déclaration précédente, le nom complet de la classe Nested est Container.Nested. Il s’agit du nom utilisé pour créer une instance de la classe imbriquée, comme suit :

Container.Nested nest = new Container.Nested();

Voir aussi