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
является базовым классом для всех типов, то в необобщенной коллекции может быть сохранен объект любого типа, включая и типы значений, в силу автоматической упаковки и распаковки.
Читать дальше