Pourquoi ne pas hériter de List<T> ?

Pourquoi ne pas hériter de List ?

Il y a de bonnes réponses ici. J’y ajouterais les points suivants.

Quelle est la manière correcte en C# de représenter une structure de données qui, « logiquement » (c’est-à-dire « pour l’esprit humain »), est juste une liste de choses avec quelques fioritures ?

Demandez à dix personnes non informaticiennes qui connaissent l’existence du football de compléter le blanc :

Une équipe de football est un type particulier de _____

Est-ce que quelqu’un a dit « liste de joueurs de football avec quelques fioritures », ou ont-ils tous dit « équipe sportive » ou « club » ou « organisation » ? Votre idée qu’une équipe de football est un type particulier de liste de joueurs n’existe que dans votre esprit humain et lui seul.

List<T> est un mécanisme. Une équipe de football est un objet métier – c’est-à-dire un objet qui représente un concept du domaine métier du programme. Ne mélangez pas les deux ! Une équipe de football est un type d’ équipe ; elle possède un effectif, un effectif est une liste de joueurs. Un effectif n’est pas un type particulier de liste de joueurs. Un effectif est une liste de joueurs. Créez donc une propriété appelée Roster qui est une List<Player>. Et faites-en une ReadOnlyList<Player> pendant que vous y êtes, à moins que vous ne pensiez que quiconque connaissant une équipe de football devrait pouvoir supprimer des joueurs de l’effectif.

Hériter de List<T> est-il toujours inacceptable ?

Inacceptable pour qui ? Pour moi ? Non.

Quand est-ce acceptable ?

Quand vous construisez un mécanisme qui étend le mécanisme List<T>.

Que doit considérer un programmeur lorsqu’il décide d’hériter ou non de List<T> ?

Est-ce que je construis un mécanisme ou un objet métier ?

Mais c’est beaucoup de code ! Qu’est-ce que j’y gagne avec tout ce travail ?

Vous avez passé plus de temps à taper votre question qu’il ne vous en aurait fallu pour écrire des méthodes de transfert pour les membres pertinents de List<T> cinquante fois. Vous n’avez clairement pas peur de la verbosité, et nous parlons d’une très petite quantité de code ici ; c’est quelques minutes de travail.

MISE À JOUR

J’y ai réfléchi un peu plus et il y a une autre raison de ne pas m

(Réponse tronquée)