Partilhar via


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

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:

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

Ver também