C# 2010. Ускоренный курс для профессионалов
Трей Нэш
Книга «C# 2010: ускоренный курс для профессионалов» - руководство по созданию эффективного кода на C# 4.0. В ней показано, как пишутся программы, которые характеризуются надежностью, устойчивостью к ошибкам и готовностью быть помещенными в широко доступные библиотеки. В книге предлагается хорошо организованный и легко читаемый текст, посвященный C# 2010 и хорошо испытанным и правильным идиомам, шаблонам и принципам проектирования, которые созревали на объектно-ориентированной арене в течение всего времени существования .NET Framework. На многочисленных коротких примерах демонстрируется регулярное использование общих шаблонов проектирования в .NET Framework и показывается, как применять их в собственных разработках.
В этой книге детально рассматриваются все новые средства языка C#, включая динамические типы, ковариантность и контравариантность, расширяющие методы, лямбда-выражения, язык LINQ и многие другие. Новые динамические типы существенно упрощают реализацию средств взаимодействия, создание которых раньше сопровождалось значительными трудностями. Расширяющие методы, лямбда-выражения и язык LINQ поощряют использование модели функционального программирования в рамках того, что ранее было в основном императивным языком программирования. После того как вы начнете применять их, вы очень быстро ощутите, насколько расширились ваши возможности в построении решений. Еще одной областью интересов разработчиков на C# является написание безопасного к исключениям и устойчивого к ошибкам кода. Среда .NET Framework поддерживает множество возможностей, включая ограниченные области выполнения, которые помогают защищать состояние приложения в случае асинхронного исключения. Все эти возможности также рассматриваются в книге. Успешного вам программирования, и помните, что определение контракта перед реализацией, стремление к нейтральному в отношении исключений коду и экономное использование ресурсов - это ключи к получению успешного продукта.
Книга ведущего специалиста в области технологий .NET представляет собой интенсивный курс по новейшей версии языка C#, воплотившей в себе важные дополнения и предлагающей среду, в которой функциональное программирование может органично переплетаться с обычным стилем императивного программирования C#. Эта книга может служить как кратким учебным пособием, так и постоянно используемым справочником. Вы быстро освоите синтаксис C#, изучая, как среда CLR упрощает решение многих задач программирования. Вы также получите большой набор рекомендаций по построению эффективного, многократно используемого и надежного кода. Зачем тратить месяцы или даже годы на поиск наилучших подходов к проектированию и написанию кода C#, если в данной книге будет показано, как все делать правильно с самого начала? Вы узнаете, как
- C# работает и взаимодействует с CLR;
- использовать массивы, коллекции и итераторы;
- обрабатывать события с помощью делегатов и анонимных функций;
- проектировать и использовать обобщенные типы и методы;
- строить высокоэффективные и надежные многопоточные приложения;
- применять анонимные типы, лямбда-выражения и расширяющие методы, появившиеся в C#.
Книга рассчитана на программистов разной квалификации, а также будет полезна студентам и преподавателям дисциплин, связанных с программированием и разработкой для .NET.
Издательство: Вильямс, 2010 г.
ISBN 978-5-8459-1638-9, 978-1-43-022537-9
Количество страниц: 592.
Содержание книги «C# 2010. Ускоренный курс для профессионалов»:
- 14 Об авторе
- 14 О техническом редакторе
- 15 Благодарности
- 16 Введение
- 17 Как организована эта книга
- 20 От издательства
- 21 Глава 1. Обзор C#
- 21 Отличия между C# и C++
- 21 Язык C#
- 22 Язык C++
- 23 Сборка мусора CLR
- 23 Пример программы на C#
- 25 Обзор средств, добавленных в C# 2.0
- 26 Обзор средств, добавленных в C# 3.0
- 27 Обзор новых средств C# 4.0
- 28 Резюме
- 21 Отличия между C# и C++
- 29 Глава 2. C# и CLR
- 29 JIT-компилятор и CLR
- 31 Сборки и загрузчик сборок
- 32 Минимизация рабочего набора приложения
- 33 Назначение сборкам имен
- 33 Загрузка сборок
- 34 Метаданные
- 35 Совместимость между языками
- 36 Резюме
- 37 Глава 3. Обзор синтаксиса C#
- 37 C# — строго типизированный язык
- 38 Выражения
- 39 Операторы и выражения
- 40 Типы и переменные
- 42 Типы значений
- 45 Ссылочные типы
- 45 Инициализация переменных по умолчанию
- 46 Неявно типизированные локальные переменные
- 48 Преобразования типов
- 50 Операции as и is
- 51 Обобщения
- 53 Пространства имен
- 54 Определение пространств имен
- 55 Использование пространств имен
- 56 Поток управления
- 56 if-else, while, do-while и for
- 56 switch
- 57 foreach
- 58 break, continue, goto, return и throw
- 58 Резюме
- 59 Глава 4. Классы, структуры и объекты
- 61 Определения классов
- 62 Поля
- 65 Конструкторы
- 66 Методы
- 67 Свойства
- 72 Инкапсуляция
- 76 Доступность
- 77 Интерфейсы
- 79 Наследование
- 85 Герметизированные классы
- 86 Абстрактные классы
- 87 Вложенные классы
- 90 Индексаторы
- 92 Частичные классы
- 93 Частичные методы
- 94 Статические классы
- 96 Зарезервированные имена членов
- 97 Определения типов значений
- 100 Смысл ключевого слова this
- 102 Финализаторы
- 102 Интерфейсы
- 103 Анонимные типы
- 105 Инициализаторы объектов
- 108 Упаковка и распаковка
- 112 Когда происходит упаковка
- 113 Эффективность и путаница
- 114 Класс System.Object
- 116 Эквивалентность и ее смысл
- 116 Интерфейс IComparable
- 116 Создание объектов
- 116 Ключевое слово new
- 118 Инициализация полей
- 119 Статические конструкторы (класса)
- 122 Конструктор экземпляра и порядок создания
- 125 Уничтожение объектов
- 126 Финализаторы
- 127 Детерминированное уничтожение
- 128 Обработка исключений
- 128 Одноразовые объекты
- 129 Интерфейс IDisposable
- 131 Ключевое слово using
- 132 Типы параметров методов
- 132 Аргументы-значения
- 133 Аргументы ref
- 134 Параметры out
- 135 Массивы params
- 136 Перегрузка методов
- 136 Необязательные аргументы
- 137 Именованные аргументы
- 140 Наследование и виртуальные методы
- 140 Виртуальные и абстрактные методы
- 141 Методы new и override
- 143 Методы sealed
- 144 Завершающие замечания о виртуальных методах C#
- 144 Наследование, включение и делегирование
- 144 Выбор между интерфейсом и наследованием класса
- 146 Сравнение делегирования и композиции с наследованием
- 148 Резюме
- 61 Определения классов
- 149 Глава 5. Интерфейсы и контракты
- 150 Интерфейсы определяют типы
- 151 Определение интерфейсов
- 152 Что может быть интерфейсом?
- 152 Наследование интерфейсов и сокрытие членов
- 154 Реализация интерфейсов
- 155 Неявная реализация интерфейса
- 155 Явная реализация интерфейса
- 157 Переопределение реализаций интерфейсов в производных классах
- 160 Остерегайтесь побочных эффектов от реализации интерфейсов типами значений
- 161 Правила сопоставления членов интерфейсов
- 164 Явная реализация интерфейса с помощью типа значений
- 166 Соображения, касающиеся версий
- 167 Контракты
- 167 Контракты, реализованные классами
- 169 Контракты интерфейса
- 170 Выбор между интерфейсами и классами
- 173 Резюме
- 175 Глава 6. Перегрузка операций
- 175 Можете — не значит должны
- 175 Типы и форматы перегруженных операций
- 177 Операции не должны изменять свои операнды
- 177 Имеет ли значение порядок параметров?
- 178 Перегрузка операции сложения
- 179 Операции, допускающие перегрузку
- 179 Операции сравнения
- 182 Операции преобразования
- 185 Булевские операции
- 187 Резюме
- 189 Глава 7. Безопасность и обработка исключений
- 189 Как CLR трактует исключения
- 190 Механизм обработки исключений в C#
- 190 Генерация исключений
- 190 Изменения, касающиеся необработанных исключений, которые появились в .NET 2.0
- 192 Обзор синтаксиса операторов try, catch и finally
- 194 Повторная генерация и трансляция исключений
- 196 Исключения, сгенерированные в блоке finally
- 197 Исключения, сгенерированные в финализаторах
- 198 Исключения, сгенерированные в статических конструкторах
- 199 Кто должен обрабатывать исключения?
- 200 Избегайте применения исключений для управления потоком выполнения
- 200 Обеспечение нейтральности к исключениям
- 201 Базовая структура нейтрального к исключениям кода
- 206 Ограниченные области выполнения
- 208 Критичные финализаторы и SafeHandle
- 212 Создание пользовательских классов исключений
- 214 Работа с выделенными ресурсами и исключениями
- 218 Обеспечение поведения отката
- 221 Резюме
- 223 Глава 8. Работа со строками
- 223 Обзор String
- 224 Строковые литералы
- 225 Спецификаторы формата и глобализация
- 226 Object.ToString, IFormattable и CultureInfo
- 227 Создание и регистрация пользовательских типов CultureInfo
- 229 Форматные строки
- 230 Console.WriteLine и String.Format
- 231 Примеры строкового форматирования в пользовательских типах
- 232 ICustomFormatter
- 234 Сравнение строк
- 236 Работа со строками из внешних источников
- 238 StringBuilder
- 239 Поиск строк с помощью регулярных выражений
- 240 Поиск с помощью регулярных выражений
- 241 Поиск и группирование
- 245 Замена текста с помощью Regex
- 247 Варианты создания Regex
- 248 Резюме
- 249 Глава 9. Массивы, типы коллекций и итераторы
- 249 Представление массивов
- 251 Неявно типизированные массивы
- 253 Возможность преобразования и ковариантность
- 254 Возможности сортировки и поиска
- 254 Синхронизация
- 255 Сравнение векторов и массивов
- 256 Многомерные прямоугольные массивы
- 258 Многомерные зубчатые массивы
- 260 Типы коллекций
- 260 Сравнение ICollection<T> и ICollection
- 261 Синхронизация коллекций
- 262 Списки
- 263 Словари
- 264 Наборы
- 264 System.Collections.ObjectModel
- 267 Эффективность
- 268 IEnumerable<T>, IEnumerator<T>, IEnumerable и IEnumerator
- 272 Типы, производящие коллекции
- 272 Итераторы
- 277 Прямые, обратные и двунаправленные итераторы
- 281 Инициализаторы коллекций
- 282 Резюме
- 249 Представление массивов
- 283 Глава 10. Делегаты, анонимные функции и события
- 283 Обзор делегатов
- 284 Создание и использование делегатов
- 285 Одиночный делегат
- 286 Цепочки делегатов
- 288 Итерация по цепочкам делегатов
- 289 Несвязанные делегаты (делегаты открытого экземпляра)
- 292 События
- 296 Анонимные методы
- 298 Захваченные переменные и замыкания
- 300 Остерегайтесь сюрпризов, связанных с захваченными переменными
- 303 Анонимные методы как привязки параметров делегатов
- 306 Шаблон Strategy
- 307 Резюме
- 309 Глава 11. Обобщения
- 310 Разница между обобщениями и шаблонами C++
- 311 Эффективность и безопасность типов обобщений
- 313 Определения обобщенных типов и конструируемые типы
- 313 Обобщенные классы и структуры
- 316 Обобщенные интерфейсы
- 317 Обобщенные методы
- 319 Обобщенные делегаты
- 322 Преобразование обобщенного типа
- 322 Выражение значения по умолчанию
- 324 Типы, допускающие значения null
- 325 Контроль доступа к конструируемым типам
- 326 Обобщения и наследование
- 327 Ограничения
- 332 Ограничения на неклассовых типах
- 332 Ковариантность и контравариантность
- 334 Ковариантность
- 337 Контравариантность
- 338 Инвариантность
- 339 Вариантность и делегаты
- 343 Обобщенные системные коллекции
- 344 Обобщенные системные интерфейсы
- 346 Проблемы выбора и их решение
- 346 Преобразования и операции внутри обобщенных типов
- 354 Динамическое создание конструируемых типов
- 356 Резюме
- 357 Глава 12. Многопоточность в C#
- 357 Многопоточность в C# и .NET
- 358 Запуск потоков
- 360 Передача данных новым потокам
- 361 Использование ParameterizedThreadStart
- 362 Шаблон IOU и асинхронные вызовы методов
- 362 Состояния потока
- 364 Завершение потоков
- 366 Останавливающиеся и пробуждающиеся потоки
- 368 Ожидание завершения потока
- 368 Потоки переднего плана и фоновые потоки
- 369 Локальное хранилище потока
- 372 Как неуправляемые потоки и апартаменты COM приспособлены друг к другу
- 373 Синхронизация работы между потоками
- 375 Легковесная синхронизация с помощью класса Interlocked
- 381 Класс SpinLock
- 382 Класс Monitor
- 391 Блокирующие объекты
- 396 Семафоры
- 398 События
- 399 Объекты синхронизации Win32 и WaitHandle
- 402 Использование ThreadPool
- 403 Асинхронные вызовы методов
- 410 Таймеры
- 411 Параллельное программирование
- 412 Класс Task
- 413 Класс Parallel
- 417 Простой вход в пул потоков
- 418 Классы коллекций, безопасные в отношении потоков
- 419 Резюме
- 357 Многопоточность в C# и .NET
- 421 Глава 13. В поисках канонических форм C#
- 422 Канонические формы ссылочных типов
- 422 Классы должны помечаться как sealed по умолчанию
- 423 Использование шаблона NVI
- 426 Является ли Object клонируемым?
- 431 Является ли Object одноразовым?
- 434 Нужен ли финализатор для Object?
- 441 Что означает эквивалентность для данного объекта?
- 441 Ссылочные типы и эквивалентность идентичности
- 444 Эквивалентность значений
- 445 Переопределение Object.Equals для ссылочных типов
- 448 Если переопределен метод Equals, то необходимо переопределить и GetHashCode
- 451 Поддерживает ли объект упорядочивание?
- 453 Является ли Object форматируемым?
- 457 Является ли Object преобразуемым?
- 459 Всегда отдавайте предпочтение безопасности типов
- 463 Использование неизменяемых ссылочных типов
- 465 Канонические формы типов значений
- 466 Переопределение Equals для повышения производительности
- 470 Поддерживают ли значения этого типа какие-то интерфейсы?
- 471 Реализация безопасных к типам версий для членов интерфейса и унаследованных методов
- 473 Резюме
- 473 Список вопросов для ссылочных типов
- 475 Список вопросов для типов значений
- 422 Канонические формы ссылочных типов
- 477 Глава 14. Расширяющие методы
- 477 Введение в расширяющие методы
- 478 Как компилятор находит расширяющие методы?
- 481 Что происходит «за кулисами»
- 481 Читабельность или понятность кода
- 483 Рекомендации по использованию
- 483 Использование расширяющих методов вместо наследования
- 484 Изоляция расширяющих методов в отдельном пространстве имен
- 485 Изменение контракта типа может нарушить работу расширяющих методов
- 485 Трансформации
- 489 Цепочки операций
- 491 Пользовательские итераторы
- 492 Заимствование из функционального программирования
- 498 Шаблон Visitor
- 501 Резюме
- 477 Введение в расширяющие методы
- 503 Глава 15. Лямбда-выражения
- 503 Введение в лямбда-выражения
- 504 Лямбда-выражения и замыкания
- 507 Замыкания в C# 1.0
- 508 Замыкания в C# 2.0
- 509 Лямбда-операторы
- 509 Деревья выражений
- 512 Операции над выражениями
- 513 Функции как данные
- 513 Полезные применения лямбда-выражений
- 514 Вернемся к итераторам и генераторам
- 517 Замыкание (захват переменной) и мемоизация
- 521 Каррирование
- 523 Анонимная рекурсия
- 524 Резюме
- 503 Введение в лямбда-выражения
- 525 Глава 16. LINQ: язык интегрированных запросов
- 526 Мост к данным
- 526 Выражения запросов
- 528 Вернемся к расширяющим методам и лямбда-выражениям
- 529 Стандартные операции запросов
- 530 Ключевые слова запросов C#
- 530 Конструкция from и переменные диапазона
- 532 Конструкция join
- 534 Конструкция where и фильтры
- 534 Конструкция orderby
- 535 Конструкция select и проекция
- 537 Конструкция let
- 538 Конструкция group
- 541 Конструкция into и продолжение
- 542 Преимущества лени
- 542 Поощрение лени итераторами C#
- 543 Ниспровержение лени
- 545 Немедленное выполнение запросов
- 545 Еще раз о деревьях выражений
- 546 Приемы функционального программирования
- 546 Пользовательские стандартные операции запросов и «ленивое» вычисление
- 553 Замена операторов foreach
- 555 Резюме
- 526 Мост к данным
- 557 Глава 17. Динамические типы
- 557 Что означает динамический?
- 559 Как работает тип dynamic?
- 561 Замечательная унификация
- 562 Места вызовов
- 564 Объекты со специальным динамическим поведением
- 566 Эффективность
- 567 Упаковка с помощью типа dynamic
- 568 Динамические преобразования
- 569 Неявные преобразования динамических выражений
- 570 Динамическое разрешение перегрузки
- 572 Динамическое наследование
- 572 Нельзя наследовать от dynamic
- 573 Нельзя реализовывать интерфейсы dynamic
- 575 Возможность наследования от динамических базовых типов
- 576 Утиная типизация в C#
- 579 Ограничения динамических типов
- 579 Динамическое создание объектов с помощью ExpandoObject
- 583 Резюме
- 584 Предметный указатель
Инструкция как скачать книгу Трей Нэш: C# 2010. Ускоренный курс для профессионалов в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.