Prawdopodobnie dlatego, że nie jest nazwą rodzajową i wdraża ICollection
natomiast ReadOnlyCollection<T>
jest nazwą rodzajową i wdraża ICollection<T>
. Zauważ, że ICollection<T>
nie implementuje ICollection
. Na tym topic:
ICollection<T>
Wygląda ICollection
, ale to rzeczywiście bardzo różny abstrakcją. Okazało się, że ICollection
nie było zbyt przydatne. W tym samym czasie nie mieliśmy abstrakcji, która reprezentowałaby nieindeksowaną kolekcję do odczytu/zapisu. ICollection<T>
jest taką abstrakcją i można powiedzieć, że ICollection
nie ma dokładnego odpowiednika w ogólnym świecie; IEnumerable<T>
jest najbliższy.
Od tego samego postu:
ReadOnlyCollection<T>
jest znacznie lepiej ReadOnlyCollectionBase
. Jest w przestrzeni nazw System.Collections.ObjectModel
.
Efektywnie, ReadOnlyCollection<T>
jest ReadOnlyCollectionBase
w przestrzeni generycznej.
Należy również zauważyć, że IList<T>
nie wykonuje IList
.
Ogólnie rzecz biorąc, klasy pre-generics nie służą jako użyteczne abstrakcje dla klas ogólnych (z wyjątkiem IEnumerable
).
Naprawdę, 'IEnumerable' ma ten sam problem co' IList' w zasadzie, ale wdrożenie jednolitej metody Extra (i jedną dodatkową właściwość na wyliczający) nie uznano ciężar w porównaniu z dziesiątkami byłoby potrzebne do ' IList' (które 'List' i faktycznie 'ReadOnlyCollection ' implementują, niezależnie od ich ogólnych interfejsów zbierania) –
Random832
Każdy pomysł dlaczego 'IList' nie dziedziczy po 'ICollection'? Ponieważ ten ostatni jest w zasadzie '' Count' IEnumerable' Plus, a od '' IList ma już 'metody Count' mając' 'IList dziedziczy' ICollection' nie wymagały żadnego więcej pracy dla realizatorów, ale musiałby pozwolono komuś z 'IList ' wiedzieć, ile elementów można oczekiwać od wyliczenia. –
supercat