Types imbriqués
Remarque
Ce contenu est réimprimé avec l’autorisation de Pearson Education, Inc. à partir des Instructions de conception d’une infrastructure : conventions, idiomes et modèles des bibliothèques réutilisables .NET, 2ème édition. Cette édition a été publiée en 2008, et le livre a été entièrement révisé dans la troisième édition. Certaines informations sur cette page peuvent être obsolètes.
Un type imbriqué est un type défini dans l’étendue d’un autre type, appelé type englobant. Un type imbriqué a accès à tous les membres de son type englobant. Par exemple, il a accès aux champs privés définis dans le type englobant et aux champs protégés définis dans tous les ascendants du type englobant.
En général, les types imbriqués doivent être utilisés avec parcimonie. et ce, pour plusieurs raisons. Certains développeurs ne sont pas totalement familiarisés avec le concept. Ces développeurs peuvent, par exemple, avoir des problèmes avec la syntaxe de déclaration de variables de types imbriqués. Les types imbriqués sont également très étroitement couplés à leurs types englobants et, en tant que tels, ne sont pas adaptés pour être des types à usage général.
Les types imbriqués sont mieux adaptés à la modélisation des détails d’implémentation de leurs types englobants. L’utilisateur final doit rarement avoir à déclarer des variables d’un type imbriqué et presque jamais à instancier explicitement les types imbriqués. Par exemple, l’énumérateur d’une collection peut être un type imbriqué de cette collection. Les énumérateurs sont généralement instanciés par leur type englobant, et étant donné que de nombreux langages prennent en charge l’instruction foreach, les variables énumératrices doivent rarement être déclarées par l’utilisateur final.
✔️ UTILISEZ des types imbriqués lorsque la relation entre le type imbriqué et son type externe est telle que la sémantique de l’accessibilité aux membres est souhaitable.
❌ N’utilisez PAS les types imbriqués publics comme construction de regroupement logique ; utilisez des espaces de noms pour cela.
❌ ÉVITEZ les types imbriqués publiquement exposés. La seule exception à cela est si les variables du type imbriqué doivent être déclarées uniquement dans des scénarios rares, comme la sous-classification ou d’autres scénarios de personnalisation avancés.
❌ N’utilisez PAS de types imbriqués si le type est susceptible d’être référencé en dehors du type contenant.
Par exemple, une énumération passée à une méthode définie sur une classe ne doit pas être définie comme un type imbriqué dans la classe.
❌ N’utilisez PAS les types imbriqués s’ils doivent être instanciés par le code client. Si un type a un constructeur public, il ne doit probablement pas être imbriqué.
Si un type peut être instancié, cela semble indiquer que le type a sa propre place dans l’infrastructure (vous pouvez le créer, l’utiliser et le détruire sans jamais utiliser le type externe) et ne doit donc pas être imbriqué. Les types internes ne doivent pas être largement réutilisés en dehors du type externe sans aucune relation avec le type externe.
❌ NE définissez PAS un type imbriqué en tant que membre d’une interface. De nombreux langages ne prennent pas en charge une telle construction.
Portions © 2005, 2009 Microsoft Corporation. Tous droits réservés.
Réimprimé avec l’autorisation de Pearson Education, Inc. et extrait de Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries, 2nd Edition par Krzysztof Cwalina et Brad Abrams, publié le 22 octobre 2008 par Addison-Wesley Professional dans le cadre de la série sur le développement Microsoft Windows.