Tipo aninhado

Definição - o que significa tipo aninhado?

O tipo aninhado, em C #, é um tipo declarado em uma classe ou estrutura existente. Ao contrário de um tipo não aninhado, que é declarado diretamente em uma unidade de compilação ou espaço para nome, o tipo aninhado é definido dentro do escopo do tipo que contém (ou externo).

O tipo aninhado é usado apenas onde seu escopo, visibilidade e tempo de vida terminam no tipo que o contém, sem se expor a outros tipos. O membro enumerador dentro de um tipo de coleção é geralmente implementado como tipo aninhado para iterar sobre a coleção. Como um iterador, o enumerador permite o uso da mesma lógica do lado do cliente para iterar a coleção, independentemente da estrutura subjacente da coleção de dados.

Em geral, o tipo aninhado é usado apenas em situações em que pertence logicamente ao tipo que o contém. Ele é implementado quando o tipo de conteúdo é totalmente dependente do tipo aninhado que ajuda a encapsular os detalhes de implementação do tipo de conteúdo. É frequentemente usado em cenários onde o tipo de contenção que possui o tipo aninhado para sua implementação é usado diretamente sem qualquer requisito para instanciar seu tipo aninhado.

Definirtec explica o tipo aninhado

Um tipo aninhado pode ser acessado de qualquer lugar dentro do programa, declarando-o com um nível público de acessibilidade e usando seu nome totalmente qualificado.

Por exemplo, AddressInformation pode ser um tipo aninhado declarado dentro do tipo Employee e pode ser acessado usando seu nome totalmente qualificado, Employee.AddressInformation.

O tipo aninhado tem as seguintes propriedades principais:

  • Pode ter diferentes formas de acessibilidade que incluem privada, pública, protegida, protegida interna e interna. Por padrão, ele tem acessibilidade privada.
  • Ele pode acessar membros privados e protegidos do tipo que os contém, incluindo quaisquer membros privados e protegidos herdados. Para acessar esses membros, uma instância do tipo de conteúdo deve ser passada para o tipo aninhado por meio de seu construtor.
  • Ele permite vários níveis de aninhamento, o que permite que o bloco de código de uma classe aninhada seja definido dentro de outra.
  • Ele pode herdar do tipo que o contém e também pode ser herdado.
  • Membros privados do tipo aninhado são invisíveis para o tipo que o contém.

O tipo aninhado não deve ser usado quando precisa ser exposto publicamente para instanciação pelo código do cliente ou se for referenciado diretamente no código do cliente. Ele não pode ser usado no lugar do namespace para construções de agrupamento lógico.