Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um tipo definido dentro de 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, interface ou estrutura, os tipos aninhados têm, por padrão, o modificador de acesso privado; são acessíveis apenas a partir do tipo que os 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 embutido, da seguinte maneira:
Os tipos aninhados de uma classe podem ser públicos, protegidos, internos, protegidos internos, privados ou privados.
No entanto, definir uma
protected
classe ,protected internal
ouprivate protected
aninhada dentro de uma classe selada gera aviso do compilador CS0628, "novo membro protegido declarado em 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 ser visíveis".
Os tipos aninhados de uma estrutura podem ser públicos, internos ou privados.
O exemplo a seguir torna pública a classe Nested
:
public class Container
{
public class Nested
{
Nested() { }
}
}
O tipo aninhado, ou interno, pode aceder ao tipo envolvente, ou externo. Para aceder ao tipo contido, passe-o como argumento para o construtor do tipo interno. 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 que são acessíveis ao seu tipo recipiente. Ele pode acessar membros privados e protegidos do tipo que contém, incluindo quaisquer membros protegidos herdados.
Na declaração anterior, o nome completo da classe Nested
é Container.Nested
. Este é o nome usado para criar uma nova instância da classe aninhada, da seguinte maneira:
Container.Nested nest = new Container.Nested();