Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Руководство_по_C#.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
10.01 Mб
Скачать

11. Обобщения 296

11.1 Обзор обобщений 296

11.2 Обобщенные классы 298

11.3 Ограниченные типы 299

11.4 Ограниченные классы 301

11.5 Ограниченные интерфейсы и конструкторы 303

11.6 Ограничения ссылочного типа и типа значения 305

11.7 Иерархии обобщенных классов 306

11.8 Средства обобщений 307

11.9 Обобщенные методы 308

11.10 Обобщенные структуры 310

11.11 Обобщенные делегаты 311

11.12 Обобщенные интерфейсы 312

11.13 Модификация обобщенных методов 318

11.13.1 Переопределение виртуальных методов в обобщенном классе 318

11.13.2 Перегрузка методов с несколькими параметрами типа 318

11.14 Ковариантность и контравариантность в обобщениях 320

11.14.1 Применение ковариантности в обобщенном интерфейсе 320

11.14.2 Применение контравариантности в обобщенном интерфейсе 320

12. Коллекции, перечислители и итераторы 323

12.1 Краткий обзор коллекций 323

12.2 Необобщенные коллекции 326

12.2.1 Интерфейсы необобщенных коллекций 326

12.2.2 Структура DictionaryEntry 327

12.2.3 Классы необобщенных коллекций 327

12.3 Обобщенные коллекции 328

12.3.1 Интерфейсы обобщенных коллекций 328

12.3.2 Структура KeyValuePair<TKey, TValue> 328

12.3.3 Классы обобщенных коллекций 329

12.4 Класс ArrayList 330

12.5 Класс Hashtable 333

12.6 Стек: классы Stack и Stack<T> 335

12.7 Очередь: классы Queue и Queue<T> 337

12.8 Связный список: класс LinkedList<T> 338

12.9 Сортированный список: класс SortedList<TKey, TValue> 340

12.10 Словарь: класс Dictionary<TKey, TValue> 343

12.10.1 Тип ключа 343

12.10.2 Класс Dictionary<TKey, TValue> 344

12.11 Сортированный словарь: класс SortedDictionary<TKey, TValue> 346

12.12 Множества: классы HashSet<T> и SortedSet<T> 349

12.13 Битовые коллекции 351

12.13.1 Класс BitArray 351

12.13.2 Структура BitVector32 353

12.14 Специальные и наблюдаемые коллекции 354

12.14.1 Специальные коллекции 354

12.14.2 Наблюдаемые коллекции 355

12.15 Параллельные коллекции 357

12.16 Реализация интерфейса IComparable 359

12.17 Реализация интерфейса IComparer 361

12.18 Перечислители 364

12.18.1 Применение обычного перечислителя 364

12.18.2 Применение перечислителя типа IDictionaryEnumerator 365

12.19 Реализация интерфейсов IEnumerable и IEnumerator 366

12.20 Итераторы 367

13. Время жизни объектов 370

13.1 Базовые сведения о времени жизни объектов 370

13.2 Роль корневых элементов приложения 373

13.3 Параллельная и фоновая сборка мусора 376

13.4 Тип System.GC 376

13.5 Финализируемые объекты 380

13.6 Высвобождаемые объекты 382

13.7 Финализируемые и высвобождаемые типы 386

13.8 Отложенная инициализация объектов 388

Полезные ссылки 390

1.C# и платформа .Net

1.1Становление c#

Язык С# и связанную с ним среду .NET Framework можно без преувеличения назвать самой значительной из предлагаемых в настоящее время технологий для разработчиков. Среда .NET является такой средой, которая была создана для того, чтобы в ней можно было разрабатывать практически любое приложение для запуска в Windows, а С# является языком программирования, который был специально создан для использования в .NET Framework. Например, с применением С# и .NET Framework можно создавать динамические веб-страницы, приложения Windows Presentation Foundation, веб-службы XML, компоненты для распределенных приложений, компоненты для доступа к базам данных, классические настольные приложения Windows и даже клиентские приложения нового интеллектуального типа, обладающие возможностями для работы в оперативном и автономном режимах.

Не стоит поддаваться заблуждению из-за наличия в названии Framework слова "NET" и думать, что данная среда предназначена только для создания приложений, ориентированных на Интернет. Слово "NET" здесь является лишь показателем того, что, по мнению Microsoft, распределенные приложения, в которых обработка распределяется между клиентом и сервером, являются шагом вперед. Однако важно понимать, что С# представляет собой язык, предназначенный не только для написания приложений, способных работать в Интернете и в сети. Он предоставляет средства для кодирования практически любого типа программного обеспечения или компонентов для платформы Windows. Язык С# и среда .NET привели к революционным изменениям в способе написания разработчиками программ и сделали программирование приложений для Windows гораздо более простым, чем когда-либо.

С# — это относительно новый язык программирования, который характеризуется двумя следующими преимуществами:

С# спроектирован и разработан специально для применения с Microsoft .NET Framework (развитой платформой разработки, развертывания и выполнения распределенных приложений).

С# — язык, основанный на современной объектно-ориентированной методологии проектирования, при разработке которого специалисты из Microsoft опирались на опыт создания подобных языков, построенных в соответствии с предложенными около 20 лет назад объектно-ориентированными принципами.

Нужно подчеркнуть то важное обстоятельство, что С# — это полноценный язык программирования. Хотя он и предназначен для генерации кода, выполняемого в среде .NET, сам по себе он не является частью .NET. Существует ряд средств, которые поддерживаются .NET, но не поддерживаются С#, и, возможно, вас удивит, что есть также средства, поддерживаемые С# и не поддерживаемые .NET (например, некоторые случаи перегрузки операций). Однако поскольку язык С# предназначен для применения на платформе .NET, вам, как разработчику, важно иметь представление о .NET Framework, если вы хотите эффективно разрабатывать приложения на С#.

Для понимания важности .NET не помешает вспомнить о природе многих технологий Windows, которые появились в последние примерно 18 лет. Хотя на первый взгляд все они могут выглядеть довольно разными, на самом деле все операционные системы Windows, начиная с Windows 3.1 (которая вышла в 1992 г.) и заканчивая Window 7 и Windows Server 2008 R2, в основе своей имеют один и тот же хорошо знакомый API-интерфейс Windows. По мере появления новых версий Windows в этот API-интерфейс добавлялось много новых функций, но это был скорее процесс совершенствования и расширения API-интерфейса, а не его замена.

Давайте рассмотрим язык C# в его историческом контексте, упомянув и те движущие силы, которые способствовали его становлению.