Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
Un type imbriqué est un type que vous définissez dans une classe, un struct ou une interface. Par exemple:
public class Container
{
class Nested
{
Nested() { }
}
}
Que le type externe soit une classe, une interface ou un struct, les types imbriqués sont par défaut privés. Vous ne pouvez y accéder qu’à partir du type qui les contient. Dans l’exemple précédent, les types externes ne peuvent pas accéder à la Nested classe.
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 protégés.
Toutefois, la définition d’une
protected,protected internal, ouprivate protectedclasse imbriquée dans une classe scellée génère l’avertissement du compilateur CS0628, « nouveau membre protégé déclaré dans la 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();