<p>Il y a de bonnes réponses ici. J’y ajouterais les points suivants.</p>
<p>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 ?</p>
<p>Demandez à dix personnes non informaticiennes qui connaissent l’existence du football de compléter le blanc :</p>
<p>Une équipe de football est un type particulier de _____</p>
<p>Est-ce que <em>quelqu’un</em> 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 <em>un type particulier de liste de joueurs</em> n’existe que dans votre esprit humain et lui seul.</p>
<p><code>List<T></code> est un <em>mécanisme</em>. Une équipe de football est un <em>objet métier</em> – c’est-à-dire un objet qui représente un concept du <em>domaine métier</em> du programme. Ne mélangez pas les deux ! Une équipe de football <em>est un type d’</em> équipe ; elle <em>possède</em> un effectif, un effectif <em>est une liste de joueurs</em>. Un effectif n’est pas un <em>type particulier de liste de joueurs</em>. Un effectif <em>est</em> une liste de joueurs. Créez donc une propriété appelée <code>Roster</code> qui est une <code>List<Player></code>. Et faites-en une <code>ReadOnlyList<Player></code> 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.</p>
<p>Hériter de <code>List<T></code> est-il toujours inacceptable ?</p>
<p>Inacceptable pour qui ? Pour moi ? Non.</p>
<p>Quand est-ce acceptable ?</p>
<p>Quand vous construisez un mécanisme qui <em>étend le mécanisme <code>List<T></code></em>.</p>
<p>Que doit considérer un programmeur lorsqu’il décide d’hériter ou non de <code>List<T></code> ?</p>
<p>Est-ce que je construis un <em>mécanisme</em> ou un <em>objet métier</em> ?</p>
<p>Mais c’est beaucoup de code ! Qu’est-ce que j’y gagne avec tout ce travail ?</p>
<p>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 <code>List<T></code> 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.</p>
<p>MISE À JOUR</p>
<p>J’y ai réfléchi un peu plus et il y a une autre raison de ne pas m</p>
<p><em>(Réponse tronquée)</em></p>