Tipos aninhados
Nota
Este conteúdo é reimpresso com permissão da Pearson Education, Inc., a partir de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition. Essa edição foi publicada em 2008 e, desde então, o livro foi totalmente revisto na terceira edição. Algumas das informações nesta página podem estar desatualizadas.
Um tipo aninhado é um tipo definido dentro do escopo de outro tipo, que é chamado de tipo anexo. Um tipo aninhado tem acesso a todos os membros de seu tipo anexo. Por exemplo, tem acesso a campos privados definidos no tipo de anexo e a campos protegidos definidos em todos os ascendentes do tipo de anexo.
Em geral, os tipos aninhados devem ser usados com moderação. Há várias razões para isso. Alguns desenvolvedores não estão totalmente familiarizados com o conceito. Esses desenvolvedores podem, por exemplo, ter problemas com a sintaxe de declarar variáveis de tipos aninhados. Os tipos aninhados também estão intimamente ligados aos seus tipos fechados e, como tal, não são adequados para serem tipos de uso geral.
Os tipos aninhados são mais adequados para modelar detalhes de implementação de seus tipos de inclusão. O usuário final raramente deve ter que declarar variáveis de um tipo aninhado e quase nunca deve ter que instanciar explicitamente tipos aninhados. Por exemplo, o enumerador de uma coleção pode ser um tipo aninhado dessa coleção. Os enumeradores geralmente são instanciados por seu tipo de inclusão, e como muitos idiomas suportam a instrução foreach, as variáveis do enumerador raramente precisam ser declaradas pelo usuário final.
✔️ DO use tipos aninhados quando a relação entre o tipo aninhado e seu tipo externo é tal que a semântica de acessibilidade de membros é desejável.
❌ NÃO use tipos aninhados públicos como uma construção de agrupamento lógico; Use namespaces para isso.
❌ EVITE tipos aninhados expostos publicamente. A única exceção é se as variáveis do tipo aninhado precisarem ser declaradas apenas em cenários raros, como subclassificação ou outros cenários de personalização avançada.
❌ NÃO use tipos aninhados se for provável que o tipo seja referenciado fora do tipo que contém.
Por exemplo, um enum passado para um método definido em uma classe não deve ser definido como um tipo aninhado na classe.
❌ NÃO use tipos aninhados se eles precisarem ser instanciados pelo código do cliente. Se um tipo tem um construtor público, ele provavelmente não deve ser aninhado.
Se um tipo pode ser instanciado, isso parece indicar que o tipo tem um lugar na estrutura por conta própria (você pode criá-lo, trabalhar com ele e destruí-lo sem nunca usar o tipo externo) e, portanto, não deve ser aninhado. Os tipos internos não devem ser amplamente reutilizados fora do tipo externo sem qualquer relação com o tipo externo.
❌ NÃO defina um tipo aninhado como membro de uma interface. Muitas linguagens não suportam tal construção.
© Partes 2005, 2009 Microsoft Corporation. Todos os direitos reservados.
Reimpresso com permissão da Pearson Education, Inc., de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition por Krzysztof Cwalina e Brad Abrams, publicado em 22 de outubro de 2008 por Addison-Wesley Professional como parte da Microsoft Windows Development Series.