Compartilhar via


Tipos aninhados (guia de programação em C#)

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:

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();

Consulte também