J'ai récemment utilisé le System.Version
class et je me suis demandé pourquoi, et quelques autres classes suffisamment simples, sont marqués comme Sealed
(NotInheritable
dans VB).Pourquoi certaines classes du CLR sont-elles scellées?
Contrairement à certaines classes plus complexes, je ne vois pas ce qu'une telle classe gagnerait en étant scellée. Pour autant que je peux dire le source pour Version
n'indique aucune raison.
Y a-t-il une raison publiée/officielle (c'est-à-dire pas d'opinion) pour cela? Y a-t-il un problème qui pourrait être causé par sa dérivation? Spécifiquement pour le cas de Version
, ou à défaut pour des classes aussi simples. Contexte: J'ai dû recréer la classe Version
pour la rendre plus facile à utiliser avec une liaison bidirectionnelle car la version MS a des propriétés ReadOnly
. Mais je dois savoir si dériver causerait une question
Est-ce que cette réponse assez http://stackoverflow.com/a/7777674/920557? voir la partie [2] –
@EugeneKomisarenko Merci, un peu. La partie 1 montre clairement pourquoi un programmeur * application * peut sceller une classe (par opposition à un programmeur CLR). La deuxième partie donne des informations qui semblent logiques, mais qui sont basées sur l'hérésie et n'ont pas beaucoup de sens étant donné que les classes de base MS sont là pour nous éviter de travailler, sans nous obliger à les dupliquer. Je préférerais une source/raison plus concrète si possible. – Toby
Je crois en la conception pour l'héritage ou en l'interdisant. Concevoir pour l'héritage prend un peu de travail et limite généralement les implémentations plus loin. Dans cette optique, les cours devraient être scellés ou conçus pour pouvoir en hériter. Que faire si vous avez une implémentation d'une classe de base sur laquelle vous n'avez aucun contrôle? Une classe scellée empêche les problèmes de classe de base sur lesquels vous n'avez aucun contrôle et qui ne sont pas destinés à être hérités. – Codexer