Формализованный шаблон освобождения
Настройка процесса создания данных Lazy<>
Побудительные причины создания классов коллекций
Пространство имен System.Collections
Иллюстративный пример: работа с ArrayList
Обзор пространства имен System.Collections.Specialized
Проблемы, присущие необобщенным коллекциям
Проблема безопасности в отношении типов
Первый взгляд на обобщенные коллекции
Роль параметров обобщенных типов
Указание параметров типа для обобщенных классов и структур
Указание параметров типа для обобщенных членов
Указание параметров типов для обобщенных интерфейсов
Пространство имен System.Collections.Generic
Синтаксис инициализации коллекций
Работа с классом Dictionary<TKey,TValue>
Пространство имен System.Collections.ObjectModel
Работа с классом ObservableCollection<T>
Создание специальных обобщенных методов
Создание специальных обобщенных структур и классов
Выражения default вида значений в обобщениях
Выражения default литерального вида (нововведение в версии 7.1)
Сопоставление с образцом в обобщениях (нововведение в версии 7.1)
Примеры использования ключевого слова where
Отсутствие ограничений операций
Индексация данных с использованием строковых значений
Перегрузка индексаторных методов
Определения индексаторов в интерфейсных типах
А как насчет операций += и -=?
Перегрузка операций эквивалентности
Финальные соображения относительно перегрузки операций
Понятие специальных преобразований типов
Повторение: числовые преобразования
Повторение: преобразования между связанными типами классов
Создание специальных процедур преобразования
Дополнительные явные преобразования для типа Square
Определение процедур неявного преобразования
Определение расширяющих методов
Импортирование расширяющих методов
Расширение типов, реализующих специфичные интерфейсы
Поддержка расширяющего метода GetEnumerator() (нововведение в версии 9.0)