Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um tipo definido em uma classe, struct ou interface é chamado de tipo aninhado. Por exemplo
public class Container
{
class Nested
{
Nested() { }
}
}
Independentemente de o tipo externo ser uma classe, uma interface ou uma struct, os tipos aninhados são privados por padrão, acessíveis somente por meio do tipo que contêm. No exemplo anterior, a classe Nested é inacessível para tipos externos.
Você também pode especificar um modificador de acesso para definir a acessibilidade de um tipo aninhado, da seguinte maneira:
Os tipos aninhados de uma classe podem ser públicos, protegidos, internos, protegidos internos, privados ou privados protegidos.
No entanto, definir uma classe aninhada
protected,protected internal, ouprivate protecteddentro de uma classe selada gera o aviso do compilador CS0628, "novo membro protegido declarado na classe selada".Lembre-se também de que tornar um tipo aninhado visível externamente viola a regra de qualidade de código CA1034 "Tipos aninhados não devem estar visíveis".
Tipos aninhados de um struct podem ser públicos, internos ou particulares.
O exemplo a seguir torna a classe Nested pública:
public class Container
{
public class Nested
{
Nested() { }
}
}
O tipo aninhado ou interno pode acessar o tipo recipiente ou externo. Para acessar o tipo recipiente, passe-o como um argumento ao construtor do tipo aninhado. Por exemplo:
public class Container
{
public class Nested
{
private Container? parent;
public Nested()
{
}
public Nested(Container parent)
{
this.parent = parent;
}
}
}
Um tipo aninhado tem acesso a todos os membros acessíveis ao seu tipo recipiente. Ele pode acessar membros privados e protegidos do tipo recipiente, incluindo quaisquer membros protegidos herdados.
Na declaração anterior, o nome completo da classe Nested é Container.Nested. Esse é o nome usado para criar uma nova instância da classe aninhada, da seguinte maneira:
Container.Nested nest = new Container.Nested();