Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um tipo aninhado é um tipo que é definido dentro de uma classe, estrutura ou interface. Por exemplo:
public class Container
{
class Nested
{
Nested() { }
}
}
Independentemente de o tipo externo ser uma classe, interface ou struct, os tipos aninhados são privados por defeito. Só é possível acedê-los através do tipo que os contém. No exemplo anterior, os tipos externos não conseguem aceder à Nested classe.
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, internos protegidos, privados ou privados protegidos.
No entanto, definir uma
protected,protected internal, ouprivate protecteduma classe aninhada dentro 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 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();