- •1. Введение в ооп
- •1.1. Этапы развития технологий программирования
- •1.2. Введение в ооп
- •2. Понятие класса и объекта класса. Инкапсуляция в c#
- •2.1. Понятие класса и объекта класса. Создание объектов. Данные и методы класса
- •2.2. Передача параметров в методы класса
- •2.3. Конструкторы и деструкторы
- •2.4. Инкапсуляция в c#
- •3. Индексаторы и свойства
- •3.1. Индексаторы
- •3.2. Свойства
- •4. Наследование в c#
- •5. Полиморфизм в c#. Интерфейсы
- •5.1. Виртуальные методы и их переопределение
- •5.2. Применение абстрактных классов
- •5.3. Интерфейсы
- •6. Система типов языка c#
- •7. Структуры и перечисления
- •7.2. Тип структур
- •8. Операторы и управляющие конструкции языка c#
- •8.1. Арифметические операторы
- •8.2. Операторы отношения и логические операторы
- •8.3. Оператор присваивания
- •8.4. Оператор ?
- •8.5. Управляющие операторы
- •9. Массивы и строки
- •9.1. Массивы в c#
- •9.1.1. Одномерные массивы
- •9.1.2. Многомерные массивы
- •9.1.3. Ступенчатые массивы
- •9.2. Строки
- •9.2.1. Постоянство строк
- •10. Платформа .Net. Основные понятия и принципы работы
- •11. Пространства имен. Сборки
- •11.1. Пространства имён
- •11.2. Сборки
- •12. Время жизни переменных и область видимости переменных. Оператор new и сборка мусора
- •12.2. Финализация объектов
- •12.3. Создание высвобождаемых объектов
- •13. Исключения. Генерация и обработка
- •13.1. Основы обработки исключительных ситуаций
- •13.2. Применение пары ключевых слов try и catch
- •13.3. Генерирование исключений вручную
- •13.4. Использование блока finally
- •13.5. Класс Exception и получение производных классов
- •13.6. Ключевые слова checked и unchecked
- •14. Обобщения (шаблоны) и их применение в языке c#
- •15. Основные классы коллекций объектов
- •15.1. Интерфейсы необобщенных коллекций
- •15.1.1. Интерфейс iCollection
- •15.1.2. Интерфейс iList
- •15.1.3. Интерфейс iDictionary
- •16. Использование linq для работы с коллекциями
- •16.1. Простой запрос
- •16.2. Общая форма запроса
- •16.3. Сортировка результатов запроса с помощью оператора orderby
- •16.4 Операторы group, into, let и join
- •16.5. Методы запроса
- •16.6. Формирование запроса с помощью методов запроса
- •Заключение
- •Оглавление
- •1. Введение в ооп 3
- •1.1. Этапы развития технологий программирования 3
- •1.2. Введение в ооп 11
- •394026 Воронеж, Московский просп., 14
15.1. Интерфейсы необобщенных коллекций
В пространстве имен System.Collections определен целый ряд интерфейсов необобщенных коллекций. Начинать рассмотрение необобщенных коллекций следует именно с интерфейсов, поскольку они определяют функциональные возможности, которые являются общими для всех классов необобщенных коллекций. Интерфейсы, служащие опорой для необобщенных коллекций, сведены в табл. 5.
Таблица 5
Интерфейсы необобщенных коллекций
Интерфейс |
Описание |
iCollection |
Определяет элементы, которые должны иметь все необобщенные коллекции |
iComparer |
Определяет метод Compare () для сравнения объектов, хранящихся в коллекции |
iDictionary
|
Определяет коллекцию, состоящую из пар "ключ-значение" |
IDictionaryEnumerator |
Определяет перечислитель для коллекции, реализующей интерфейс IDictionary |
IEnumerable |
Определяет метод GetEnumerator(), предоставляющий перечислитель для любого класса коллекции |
IEnumerator |
Предоставляет методы, позволяющие получать содержимое коллекции по очереди |
iEqualityComparer |
Сравнивает два объекта на предмет равенства |
iList |
Определяет коллекцию, доступ к которой можно получить с помощью индексатора |
iStructuralComparable |
Определяет метод CompareTo (), применяемый для структурного сравнения |
iStructuralEquatable |
Определяет метод Equals(), применяемый для выяснения структурного, а не ссылочного равенства. Кроме того, определяет метод GetHashCode () |
Далее будут рассмотрены интерфейсы ICollection и IDictionary.
15.1.1. Интерфейс iCollection
Интерфейс ICollection служит основанием, на котором построены все необобщенные коллекции. В нем объявляются основные методы и свойства для всех необобщенных коллекций. Он также наследует от интерфейса IEnumerable.
В интерфейсе ICollection определяются перечисленные ниже свойства. Свойство Count используется чаще всего, поскольку оно содержит количество элементов, хранящихся в коллекции на данный момент. Если значение свойства Count равно нулю, то коллекция считается пустой.
В интерфейсе ICollection определяется следующий метод.
void CopyTo(Array target, int startIdx)
Метод СоруТо() копирует содержимое коллекции в массив target, начиная с элемента, указываемого по индексу startIdx. Следовательно, метод СоруТо() обеспечивает в С# переход от коллекции к стандартному массиву.
Благодаря тому что интерфейс ICollection наследует от интерфейса IEnumerable, в его состав входит также единственный метод, определенный в интерфейсе IEnumerable. Это метод GetEnumerator (), объявляемый следующим образом.
IEnumerator GetEnumerator()
Он возвращает перечислитель для коллекции.
15.1.2. Интерфейс iList
В интерфейсе IList объявляется такое поведение необобщенной коллекции, которое позволяет осуществлять доступ к ее элементам по индексу с отсчетом от нуля.
Этот интерфейс наследует от интерфейсов ICollection и IEnumerable. Помимо методов, определенных в этих интерфейсах, в интерфейсе IList определяется ряд собственных методов. В некоторых из них предусматривается модификация коллекции. Если же коллекция доступна только для чтения или имеет фиксированный размер, то в этих методах генерируется исключение NotSupportedException.
Методы, определенные в IList:
1) int Add(object value) - добавляет объект value в вызывающую коллекцию. Возвращает индекс, по которому этот объект сохраняется.
2) void Clear() - удаляет все элементы из вызывающей коллекции
3) bool Contains(object value) - возвращает логическое значение true, если вызывающая коллекция содержит объект value, а иначе — логическое значение false.
4) int indexOf(object value) - возвращает индекс объекта value, если этот объект содержится в вызывающей коллекции. Если же объект value не обнаружен, то метод возвращает значение -1.
5) void Insert(int index, object value) - вставляет в вызывающую коллекцию объект value по индексу index. Элементы, находившиеся до этого по индексу index и дальше, смещаются вперед, чтобы освободить место для вставляемого объекта value;
6) void Remove(object value) - удаляет первое вхождение объекта value в вызывающей коллекции. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы устранить образовавшийся "пробел";
7) void RemoveAt(int index) - удаляет из вызывающей коллекции объект, расположенный по указанному индексу index. Элементы, находившиеся до этого за удаленным элементом, смещаются назад, чтобы устранить образовавшийся "пробел".
Объекты добавляются в коллекцию типа iList вызовом метода Add(), который принимает аргумент типа object. А поскольку object является базовым классом для всех типов, то в необобщенной коллекции может быть сохранен объект любого типа, включая и типы значений.
В интерфейсе IList определяются следующие свойства.
bool IsFixedSize { get; }
bool IsReadOnly { get; }
Если коллекция имеет фиксированный размер, то свойство IsFixedSize содержит логическое значение true. Это означает, что в такую коллекцию нельзя ни вставлять элементы, ни удалять их из нее. Если же коллекция доступна только для чтения, то свойство IsReadOnly содержит логическое значение true. Это означает, что содержимое такой коллекции не подлежит изменению.
Кроме того, в интерфейсе IList определяется следующий индексатор.
object this[int index] { get; set; }
Этот индексатор служит для получения и установки значения элемента коллекции. Но его нельзя использовать для добавления в коллекцию нового элемента. С этой целью обычно вызывается метод Add (). Как только элемент будет добавлен в коллекцию, он станет доступным посредством индексатора.
Пример:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text;
public class MainClass
{
public static void Main()
{
IList<double> myList = new List<double>();
myList.Add(10.5);
myList.Add(209.224);
myList.Insert(1, 3.999);
myList.Add(48.2);
myList.Remove(10.4);
Console.WriteLine("IndexOf {0} = {1}", 209.2234,
myList.IndexOf(209.2234));
Console.WriteLine("IndexOf {0} = {1}", 10.54, myList.IndexOf(10.54));
}
}