Списки

Одной вещью, которая отсутствует ICollection, и на то есть веская причина, является операция индекса, которая позволяет обращаться к элементам внутри коллекции с использованием знакомого синтаксиса доступа к массиву. Дело в том, что операция индекса нужна не всем конкретным типам, реализующим ICollection, а в некоторых случаях она и вовсе не имеет смысла.

Например, операция индекса для списка целых чисел могла бы, скорее всего, иметь параметр типа int, в то время как тип словаря должен был бы принимать параметр типа, совпадающего с типом ключа такого словаря.

Если определяется коллекция, для которой имеет смысл индексировать элементы, то необходимо, чтобы эта коллекция реализовала IList. Конкретные обобщенные типы коллекций-списков обычно реализуют интерфейсы IListn IList. Интерфейс IList реализует ICollection, а интерфейс IList реализует ICollection, поэтому любой тип, являющийся списком, также является коллекцией. Интерфейс IList выглядит следующим образом:

1
2
3
4
5
6
public interface IList : ICollection, IEnumerable, IEnumerable {
I this [ int index ]  { get; set; }
int IndexOf ( I item ) ;
void Insert ( int index, I item );
void RemoveAt ( int index ) ;
}

Интерфейс IList немного больше:

1
2
3
4
5
6
7
8
9
10
11
12
public interface IList : ICollection, IEnumerable {
bool IsFixedSize { get; }
bool IsReadOnly { get; }
object this [ int index ]  { get; }
int Add( object value ) ;
void Clear();
bool Contains( object value );
int IndexOf( object value );
void Insert( int index, object value );
void Remove( object value );
void RemoveAt ( int index ) ;
}

Как видите, интерфейсы IList и IList частично перекрываются, но в IList присутствует множество полезных свойств и методов, которых не может иметь такой обобщенный контейнер, как IList, или любой другой обобщенный контейнер, созданный вами. Как в случае с ICollection и ICollection, типичный подход предусматривает реализацию обоих интерфейсов.

Методы IList, которые перекрывают по функциональности соответствующие методы IList, должны быть реализованы явно, чтобы единственным способом обратиться к ним было явное преобразование экземпляра к типу IList.

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100