Um den "Warum" -Teil der Frage zu beantworten, warum nicht List<T>
, sind die Gründe zukunftssicher und API-Einfachheit.
Zukunftssicher
List<T>
ist nicht so konzipiert, dass es durch Unterklassen leicht erweiterbar ist; Es ist so konzipiert, dass es für interne Implementierungen schnell ist. Sie werden bemerken , die Methoden auf nicht virtuell sind und so nicht außer Kraft gesetzt werden kann, und es gibt keine Haken in seine Add
/ Insert
/ Remove
Operationen.
Dies bedeutet, dass Sie den Typ ändern müssen, wenn Sie das Verhalten der Auflistung in Zukunft ändern müssen (z. B. um Nullobjekte abzulehnen, die von Personen hinzugefügt werden sollen, oder um zusätzliche Arbeiten auszuführen, wenn dies geschieht, z. B. das Aktualisieren Ihres Klassenstatus) Von der Sammlung kehren Sie zu einer Unterklasse zurück, die eine brechende Schnittstellenänderung darstellt (natürlich kann das Ändern der Semantik von Dingen wie dem Nichtzulassen von Null auch eine Schnittstellenänderung sein, aber Dinge wie das Aktualisieren Ihres internen Klassenstatus wären dies nicht).
Wenn Sie also entweder eine Klasse zurückgeben, die leicht in Unterklassen wie Collection<T>
oder eine Schnittstelle wie unterteilt werden kann IList<T>
, ICollection<T>
oder IEnumerable<T>
Ihre interne Implementierung so ändern können, dass sie Ihren Anforderungen entspricht, ohne den Code der Verbraucher zu beschädigen, da sie weiterhin als zurückgegeben werden kann der Typ, den sie erwarten.
API-Einfachheit
List<T>
enthält viele nützliche Funktionen wie BinarySearch
, Sort
und so weiter. Wenn es sich jedoch um eine Sammlung handelt, die Sie verfügbar machen, steuern Sie wahrscheinlich die Semantik der Liste und nicht die Verbraucher. Während Ihre Klasse diese Operationen möglicherweise intern benötigt, ist es sehr unwahrscheinlich, dass Verbraucher Ihrer Klasse sie anrufen möchten (oder sollten).
Indem Sie eine einfachere Sammlungsklasse oder -schnittstelle anbieten, reduzieren Sie die Anzahl der Mitglieder, die Benutzer Ihrer API sehen, und erleichtern ihnen die Verwendung.