Вот список классов, реализующих ICollection<T>
в System.Collections
пространстве имен:
System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>
System.Collections.Generic.Dictionary<TKey, TValue>
System.Collections.Generic.HashSet<T>
System.Collections.Generic.LinkedList<T>
System.Collections.Generic.List<T>
System.Collections.Generic.SortedDictionary<TKey, TValue>
System.Collections.Generic.SortedList<TKey, TValue>
System.Collections.Generic.SortedSet<T>
System.Collections.ObjectModel.Collection<T>
System.Collections.ObjectModel.ReadOnlyCollection<T>
System.Collections.ObjectModel.ReadOnlyDictionary<TKey, TValue>
System.Collections.ObjectModel.WeakReadOnlyCollection<T>
Но все эти реализации добавить дополнительные функциональные возможности, а так как вы хотите, чтобы наследовать от реализации, но только разоблачить ICollection<T>
методы, с помощью любой из них на самом деле не вариант.
Единственный выбор, который у вас есть - это реализовать свои собственные. Это достаточно легко сделать. Вам просто нужно обернуть подходящую реализацию ICollection<T>
.Вот один, который использует List<T>
по умолчанию, но также позволяет производным классам использовать определенный тип ICollection<T>
:
class SimpleCollection<T> : ICollection<T>
{
ICollection<T> _items;
public SimpleCollection() {
// Default to using a List<T>.
_items = new List<T>();
}
protected SimpleCollection(ICollection<T> collection) {
// Let derived classes specify the exact type of ICollection<T> to wrap.
_items = collection;
}
public void Add(T item) {
_items.Add(item);
}
public void Clear() {
_items.Clear();
}
public bool Contains(T item) {
return _items.Contains(item);
}
public void CopyTo(T[] array, int arrayIndex) {
_items.CopyTo(array, arrayIndex);
}
public int Count
{
get { return _items.Count; }
}
public bool IsReadOnly
{
get { return false; }
}
public bool Remove(T item)
{
return _items.Remove(item);
}
public IEnumerator<T> GetEnumerator()
{
return _items.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return _items.GetEnumerator();
}
}
Это выходит за пределы того, что вы после этого, но если, например, вы хотите уникальные предметы в хранить, вы могли бы извлечь из этого и обеспечить HashSet<T>
как тип коллекции завернуть:
class UniqueCollection<T> : SimpleCollection<T>
{
public UniqueCollection() : base(new HashSet<T>()) {}
}
'IList' не упорядочена. –
Согласен с Кори. 'IList' - это просто интерфейс. Для заказа требуется реализация; нет ничего о 'IList ', который предполагает, что он упорядочен. Элементы, добавленные в 'Collection ', скорее всего хранятся в том же порядке, в котором вы их добавляете. –
В .NET Framework нет коллекций, которые обеспечивают действительно случайный порядок элементов ... Просьба уточнить, что именно вы ищете, когда говорите, что List-like не работает, поскольку они «упорядочены». –