Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
ouprivate 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();