Membres virtuels
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 de cette page peuvent être obsolètes.
Les membres virtuels peuvent être remplacés, ce qui modifie le comportement de la sous-classe. Ils sont assez similaires aux rappels en termes d’extensibilité fournie, mais ils sont meilleurs en termes de performances d’exécution et de consommation de mémoire. En outre, les membres virtuels se sentent plus naturels dans les scénarios qui nécessitent de créer une sorte spéciale d’un type existant (spécialisation).
Les membres virtuels fonctionnent mieux que les rappels et les événements, mais ils ne fonctionnent pas mieux que les méthodes non virtuelles.
Le principal inconvénient des membres virtuels est que le comportement d’un membre virtuel ne peut être modifié qu’au moment de la compilation. Le comportement d’un rappel peut être modifié au moment de l’exécution.
Les membres virtuels, comme les rappels (et peut-être plus que les rappels), sont coûteux à concevoir, tester et gérer, car tout appel à un membre virtuel peut être remplacé de manière imprévisible et risque d’exécuter du code arbitraire. En outre, beaucoup plus d’efforts sont généralement nécessaires pour définir clairement le contrat des membres virtuels, si bien que le coût de leur conception et de leur documentation est plus élevé.
❌ NE RENDEZ PAS les membres virtuels, sauf si vous avez une bonne raison de le faire et que vous êtes conscient de tous les coûts liés à leur conception, test et maintenance.
Les membres virtuels sont moins indulgents en termes de modifications pouvant leur être apportées sans rompre la compatibilité. En outre, ils sont plus lents que les membres non virtuels, principalement parce que les appels aux membres virtuels ne sont pas inlined.
✔️ ENVISAGEZ de limiter l’extensibilité à ce qui est absolument nécessaire.
✔️ PRÉFÉREZ une accessibilité protégée à une accessibilité publique pour les membres virtuels. Les membres publics doivent fournir une extensibilité (si nécessaire) en appelant un membre virtuel protégé.
Les membres publics d’une classe doivent fournir l’ensemble de fonctionnalités approprié pour les consommateurs directs de cette classe. Les membres virtuels sont conçus pour être remplacés dans les sous-classes et une accessibilité protégée constitue un excellent moyen d’étendre tous les points d’extensibilité virtuels à l’endroit où ils peuvent être utilisés.
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.