IStructuralEquatable -Определяет метод Equals(), применяемый для выяснения структурного, а не ссылочного равенства. Кроме того, определяет метод GetHashCode()
Интерфейс ICollection
Интерфейс ICollectionслужит основанием, на котором построены все необобщенные коллекции. В нем объявляются основные методы и свойства для всех необобщенных коллекций. Он также наследует от интерфейса IEnumerable.
В интерфейсе ICollectionопределяются перечисленные ниже свойства. Свойство Countиспользуется чаще всего, поскольку оно содержит количество элементов, хранящихся в коллекции на данный момент. Если значение свойства Countравно нулю, то коллекция считается пустой.
В интерфейсе ICollectionопределяется следующий метод.
void CopyTo(Array target, int startldx)
Свойство - Назначение
int Count { get; } - Содержит количество элементов в коллекции на данный момент
bool isSynchronized { get; } - Принимает .логическое значение true, если коллекция синхронизирована, а иначе — логическое значение false. По умолчанию коллекции не синхронизированы. Но для большинства коллекций можно получить синхронизированный вариант
object SyncRoot { get; } - Содержит объект, для которого коллекция может быть синхронизирована
Метод CopyTo()копирует содержимое коллекции в массив target, начиная с элемента, указываемого по индексу startldx. Следовательно, метод CopyTo()обеспечивает в C# переход от коллекции к стандартному массиву.
Благодаря тому что интерфейс ICollectionнаследует от интерфейса IEnumerable, в его состав входит также единственный метод, определенный в интерфейсе IEnumerable. Это метод GetEnumerator(), объявляемый следующим образом.
IEnumerator GetEnumerator()
Он возвращает перечислитель для коллекции.
Вследствие того же наследования от интерфейса IEnumerableв интерфейсе ICollectionопределяются также четыре следующих метода расширения: AsParallel(), AsQueryable(), Cast()и OfType(). В частности, метод AsParallel()объявляется в классе System.Linq.ParallelEnumerable, метод AsQueryable()— в классе System.Linq.Queryable, а методы Cast()и OfType()— в классе System.Linq.Enumerable. Эти методы предназначены главным образом для поддержки LINQ, хотя их можно применять и в других целях.
Интерфейс IList
В интерфейсе IListобъявляется такое поведение необобщенной коллекции, которое позволяет осуществлять доступ к ее элементам по индексу с отсчетом от нуля. Этот интерфейс наследует от интерфейсов ICollectionи IEnumerable. Помимо методов, определенных в этих интерфейсах, в интерфейсе IListопределяется ряд собственных методов. Все эти методы сведены в табл. 25.2. В некоторых из них предусматривается модификация коллекции. Если же коллекция доступна только для чтения или имеет фиксированный размер, то в этих методах генерируется исключение NotSupportedException.
Таблица 25.2. Методы определенные в интерфейсе IList
Метод - Описание
int Add(object value) Добавляет объект value в вызывающую коллекцию. Возвращает индекс, по которому этот объект сохраняется
void Clear() -Удаляет все элементы из вызывающей коллекции
bool Contains(object value) - Возвращает логическое значение true,если вызывающая коллекция содержит объект value ,а иначе — логическое значение false
int IndexOf(object value) - Возвращает индекс объекта value, если этот объект содержится в вызывающей коллекции. Если же объект value не обнаружен, то метод возвращает значение -1
void Insert (int index, object value) - Вставляет в вызывающую коллекцию объект value по индексу index. Элементы, находившиеся до этого по индексу index и дальше, смещаются вперед, чтобы освободить место для вставляемого объекта value
void Remove(object value) - Удаляет первое вхождение объекта valueв вызывающей коллекции. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы устранить образовавшийся “пробел”
void RemoveAt(int index) - Удаляет из вызывающей коллекции объект, расположенный по указанному индексу index. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы устранить образовавшийся “пробел”
Объекты добавляются в коллекцию типа IListвызовом метода Add(). Обратите внимание на то, что метод Add()принимает аргумент типа object. А поскольку objectявляется базовым классом для всех типов, то в необобщенной коллекции может быть сохранен объект любого типа, включая и типы значений, в силу автоматической упаковки и распаковки.
Читать дальше