Partilhar via


Tipos aninhados (Guia de Programação em C#)

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 struct, os tipos aninhados são padronizados para private, eles são acessíveis apenas a partir do tipo que o contém. No exemplo anterior, a Nested classe é 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:

O exemplo a seguir torna a Nested classe pública:

public class Container
{
    public class Nested
    {
        Nested() { }
    }
}

O tipo aninhado, ou interno, pode acessar o tipo de contenção, ou externo. Para acessar o tipo que contém, passe-o como um argumento para o 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 que são acessíveis ao seu tipo que o contém. 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();

Consulte também