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 aninhado é um tipo que você define dentro de uma classe, struct ou interface. Por exemplo:
public class Container
{
class Nested
{
Nested() { }
}
}
Independentemente de o tipo externo ser uma classe, interface ou struct, tipos aninhados são, por padrão, privados. Você pode acessá-los somente do tipo que os contém. No exemplo anterior, os tipos externos não podem acessar a Nested classe.
Você também pode especificar um modificador de acesso para definir a acessibilidade de um tipo aninhado, da seguinte maneira:
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 de 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();