Язык программирования C#. Классика Computers Science
А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд
Перед вами - четвертое издание главной книги по языку C#, написанной легендой программирования - Андерсом Хейлсбергом, архитектором C#, Delphi и Turbo Pascal, совместно с другими специалистами, входившими в группу разработчиков C# компании Microsoft. Издание является наиболее полным описанием языка и самым авторитетным источником информации по этой теме, построенным в формате сборника спецификаций, включающих в себя описание синтаксиса, сопутствующие материалы и примеры, а также образцы кода. Эта книга - своего рода «библия» разработчика, которая с легкостью может заменить как MSDN, так и остальные книги по C#.
Четвертое издание содержит описание новых особенностей C# 4.0, включая динамическое связывание, именованные и необязательные параметры, а также ковариантные и контравариантные обобщенные типы. Цель этих новшеств - расширение возможностей C# для взаимодействия с объектами, не относящимися к платформе .NET. Отличительная особенность нового издания также состоит в том, что каждая глава книги содержит обширные комментарии, написанные известными «гуру» программирования, такими как Джон Скит, Джозеф Альбахари, Билл Вагнер, Кристиан Нейгел, Эрик Липперт и другими.
Издательство: Питер, 4-е издание, 2012 г.
ISBN 978-5-459-00283-6, 978-0321741769
Количество страниц: 784.
Содержание книги «Язык программирования C#. Классика Computers Science»:
- 21 Предисловие
- 23 К читателю
- 25 Об авторах
- 26 Об авторах комментариев
- 28 Глава 1 Введение
- 30 1.1 Здравствуй, Мир
- 31 1.2 Структура программы
- 33 1.3 Типы и переменные
- 39 1.4 Выражения
- 41 1.5 Операторы
- 45 1.6 Классы и объекты
- 46 1.6.1 Элементы класса
- 47 1.6.2 Доступность
- 48 1.6.3 Параметры-типы
- 49 1.6.4 Базовые классы
- 50 1.6.5 Поля
- 51 1.6.6 Методы
- 52 1.6.6.1 Параметры
- 55 1.6.6.2 Тело метода и локальные переменные
- 56 1.6.6.3 Статические методы и методы экземпляра
- 57 1.6.6.4 Виртуальные, переопределенные и абстрактные методы
- 60 1.6.6.5 Перегрузка методов
- 62 1.6.7 Другие функциональные элементы класса
- 64 1.6.7.1 Конструкторы
- 64 1.6.7.2 Свойства
- 67 1.6.7.3 Индексаторы
- 68 1.6.7.4 События
- 69 1.6.7.5 Операции
- 70 1.6.7.6 Деструкторы
- 71 1.7 Структуры
- 73 1.8 Массивы
- 75 1.9 Интерфейсы
- 77 1.10 Перечисления
- 79 1.11 Делегаты
- 80 1.12 Атрибуты
- 83 Глава 2 Лексическая структура
- 83 2.1 Программы
- 83 2.2 Грамматики
- 83 2.2.1 Система обозначений
- 85 2.2.2 Лексическая грамматика
- 85 2.2.3 Синтаксическая грамматика
- 85 2.3 Лексический анализ
- 86 2.3.1 Символы конца строки
- 86 2.3.2 Комментарии
- 88 2.3.3 Пробельные символы
- 88 2.4 Лексемы
- 88 2.4.1 Управляющие последовательности Unicode
- 89 2.4.2 Идентификаторы
- 92 2.4.3 Ключевые слова
- 93 2.4.4 Литералы (константы)
- 93 2.4.4.1 Булевские константы
- 93 2.4.4.2 Целочисленные константы
- 95 2.4.4.3 Вещественные константы
- 96 2.4.4.4 Символьные константы
- 97 2.4.4.5 Строковые константы
- 100 2.4.4.6 Константа null
- 100 2.4.5 Знаки операций и пунктуации
- 101 2.5 Директивы препроцессора
- 102 2.5.1 Символы условной компиляции
- 103 2.5.2 Выражения препроцессора
- 103 2.5.3 Директивы объявлений
- 105 2.5.4 Директивы условной компиляции
- 108 2.5.5 Директивы диагностики
- 109 2.5.6 Директивы region
- 109 2.5.7 Директивы line
- 110 2.5.8 Директива pragma
- 111 2.5.8.1 Предупреждения pragma warning
- 113 Глава 3 Основные понятия
- 113 3.1 Запуск приложения
- 114 3.2 Завершение работы приложения
- 115 3.3 Объявления
- 118 3.4 Элементы пространств имен и типов
- 119 3.4.1 Элементы пространств имен
- 119 3.4.2 Элементы структур
- 120 3.4.3 Элементы перечислений
- 120 3.4.4 Элементы классов
- 120 3.4.5 Элементы интерфейсов
- 120 3.4.6 Элементы массивов
- 120 3.4.7 Элементы делегатов
- 121 3.5 Доступ к элементам
- 121 3.5.1 Объявление вида доступа
- 124 3.5.2 Области доступности
- 127 3.5.3 Доступ protected для элементов экземпляров
- 129 3.5.4 Ограничения доступа
- 130 3.6 Сигнатуры и перегрузка
- 133 3.7 Области видимости
- 136 3.7.1 Скрытие имен
- 137 3.7.1.1 Скрытие в результате вложения
- 138 3.7.1.2 Скрытие в результате наследования
- 136 3.7.1 Скрытие имен
- 140 3.8 Имена пространств имен и типов
- 143 3.8.1 Полные имена
- 144 3.9 Автоматическое управление памятью
- 149 3.10 Порядок выполнения
- 151 Глава 4 Типы
- 151 4.1 Типы-значения
- 152 4.1.1 Тип System.ValueType
- 153 4.1.2 Конструкторы по умолчанию
- 154 4.1.3 Структурные типы
- 155 4.1.4 Простые типы
- 156 4.1.5 Целочисленные типы
- 158 4.1.6 Типы с плавающей точкой
- 161 4.1.7 Десятичный тип
- 162 4.1.8 Булевский тип
- 163 4.1.9 Перечислимые типы
- 163 4.1.10 Обнуляемые типы
- 164 4.2 Ссылочные типы
- 165 4.2.1 Классы
- 166 4.2.2 Тип object
- 166 4.2.3 Тип dynamic
- 166 4.2.4 Тип string
- 166 4.2.5 Интерфейсы
- 166 4.2.6 Массивы
- 167 4.2.7 Делегаты
- 167 4.3 Упаковка и распаковка
- 168 4.3.1 Упаковка
- 170 4.3.2 Распаковка
- 172 4.4 Сконструированные типы
- 173 4.4.1 Аргументы-типы
- 173 4.4.2 Открытые и закрытые типы
- 174 4.4.3 Ограниченные и неограниченные типы
- 174 4.4.4 Соблюдение ограничений
- 175 4.5 Параметры-типы
- 176 4.6 Типы деревьев выражений
- 177 4.7 Тип dynamic
- 151 4.1 Типы-значения
- 179 Глава 5 Переменные
- 179 5.1 Категории переменных
- 180 5.1.1 Статические переменные
- 180 5.1.2 Переменные экземпляра
- 180 5.1.2.1 Переменные экземпляра в классах
- 181 5.1.2.2 Переменные экземпляра в структурах
- 181 5.1.3 Элементы массива
- 181 5.1.4 Параметры-значения
- 182 5.1.5 Параметры-ссылки
- 183 5.1.6 Выходные параметры
- 183 5.1.7 Локальные переменные
- 185 5.2 Значение по умолчанию
- 186 5.3 Явное присваивание
- 187 5.3.1 Инициализированные переменные
- 187 5.3.2 Неинициализированные переменные
- 188 5.3.3 Точные правила для определения явного присваивания
- 188 5.3.3.1 Общие правила для операторов
- 189 5.3.3.2 Блок, операторы checked и unchecked
- 189 5.3.3.3 Оператор-выражение
- 189 5.3.3.4 Операторы объявления
- 190 5.3.3.5 Условный оператор
- 190 5.3.3.6 Оператор выбора
- 190 5.3.3.7 Оператор цикла while
- 191 5.3.3.8 Оператор цикла do
- 191 5.3.3.9 Оператор цикла for
- 191 5.3.3.10 Операторы перехода break, continue и goto
- 191 5.3.3.11 Оператор throw
- 192 5.3.3.12 Оператор return
- 192 5.3.3.13 Оператор try-catch
- 192 5.3.3.14 Оператор try-fnally
- 193 5.3.3.15 Оператор try-catch-finally
- 194 5.3.3.16 Оператор foreach
- 194 5.3.3.17 Оператор using
- 194 5.3.3.18 Оператор lock
- 194 5.3.3.19 Оператор yield
- 195 5.3.3.20 Общие правила для простых выражений
- 195 5.3.3.21 Общие правила для выражений с вложенными выражениями
- 195 5.3.3.22 Выражения вызова и выражения создания объекта
- 196 5.3.3.23 Выражения простого присваивания
- 196 5.3.3.24 &&-выражения
- 197 5.3.3.25 Выражения ||
- 198 5.3.3.26 Выражения !
- 198 5.3.3.27 Выражения ??
- 198 5.3.3.28 Выражения ?
- 199 5.3.3.29 Анонимные функции
- 200 5.4 Ссылки на переменные
- 200 5.5 Атомарность ссылок на переменные
- 179 5.1 Категории переменных
- 201 Глава 6 Приведение типов
- 202 6.1 Неявные приведения типов
- 202 6.1.1 Тождественные преобразования
- 203 6.1.2 Неявные приведения арифметических типов
- 203 6.1.3 Неявные приведения перечислений
- 204 6.1.4 Неявные приведения обнуляемых типов
- 205 6.1.5 Неявные приведения литерала null
- 205 6.1.6 Неявные приведения ссылочных типов
- 207 6.1.7 Преобразования упаковки
- 207 6.1.8 Неявные приведения типа dynamic
- 208 6.1.9 Неявные приведения константных выражений
- 209 6.1.10 Неявные приведения параметров-типов
- 210 6.1.11 Определенные пользователем неявные приведения типов
- 210 6.1.12 Приведения анонимной функции и группы методов
- 210 6.2 Явные приведения типов
- 210 6.2.1 Явные приведения арифметических типов
- 213 6.2.2 Явные приведения перечислений
- 213 6.2.3 Явные приведения обнуляемых типов
- 214 6.2.4 Явные приведения ссылочных типов
- 215 6.2.5 Преобразование распаковки
- 216 6.2.6 Явные приведения типа dynamic
- 217 6.2.7 Явное приведение параметров-типов
- 218 6.2.8 Определенные пользователем явные приведения типов
- 219 6.3 Стандартные приведения типов
- 219 6.3.1 Стандартные неявные преобразования
- 219 6.3.2 Стандартные явные преобразования
- 220 6.4 Приведения типов, определенные пользователем
- 220 6.4.1 Допустимые приведения типов, определенные пользователем
- 220 6.4.2 Повышающие (lifted) приведения типов
- 221 6.4.3 Выполнение определенных пользователем приведений
- 222 6.4.4 Определенные пользователем неявные приведения типов
- 223 6.4.5 Определенные пользователем явные приведения типов
- 225 6.5 Приведения анонимных функций
- 227 6.5.1 Выполнение приведений анонимных функций к типам делегатов
- 228 6.5.2 Выполнение приведений анонимных функций к деревьям выражений
- 228 6.5.3 Пример реализации
- 232 6.6 Приведения групп методов
- 202 6.1 Неявные приведения типов
- 236 Глава 7 Выражения
- 236 7.1 Классификация выражений
- 238 7.1.1 Значение выражений
- 239 7.2 Статическое и динамическое связывание
- 240 7.2.1 Время связывания
- 240 7.2.2 Динамическое связывание
- 242 7.2.3 Типы составных частей выражений
- 243 7.3 Операции
- 243 7.3.1 Приоритет и ассоциативность операций
- 245 7.3.2 Перегрузка операций
- 247 7.3.3 Разрешение перегрузки унарных операций
- 247 7.3.4 Разрешение перегрузки бинарной операции
- 248 7.3.5 Набор определенных пользователем операций
- 248 7.3.6 Числовое расширение
- 249 7.3.6.1 Унарное числовое расширение
- 249 7.3.6.2 Бинарное числовое расширение
- 250 7.3.7 Расширенные операции
- 251 7.4 Поиск элемента
- 254 7.4.1 Базовые типы
- 254 7.5 Функциональные элементы
- 257 7.5.1 Списки аргументов
- 258 7.5.1.1 Соответствующие параметры
- 260 7.5.1.2 Вычисление списка аргументов во время выполнения программы
- 262 7.5.2 Выведение типов
- 264 7.5.2.1 Первая фаза
- 265 7.5.2.2 Вторая фаза
- 265 7.5.2.3 Входные типы
- 265 7.5.2.4 Выходные типы
- 265 7.5.2.5 Зависимость
- 266 7.5.2.6 Выведение выходного типа
- 266 7.5.2.7 Явное выведение типа параметра
- 266 7.5.2.8 Точное выведение
- 267 7.5.2.9 Выведение нижней границы
- 268 7.5.2.10 Выведение верхней границы
- 269 7.5.2.11 Фиксация
- 270 7.5.2.12 Выведенный тип возвращаемого значения
- 271 7.5.2.13 Выведение типа для преобразования группы методов
- 272 7.5.2.14 Нахождение наилучшего общего типа для набора выражений
- 272 7.5.3 Разрешение перегрузки
- 273 7.5.3.1 Подходящий функциональный элемент
- 274 7.5.3.2 Лучший функциональный элемент
- 276 7.5.3.3 Лучшее приведение из выражения
- 276 7.5.3.4 Лучшее приведение из типа
- 276 7.5.3.5 Лучший целевой объект приведения
- 277 7.5.3.6 Перегрузка в обобщенных классах
- 277 7.5.4 Проверка динамического разрешения перегрузки во время компиляции
- 278 7.5.5 Вызов функционального элемента
- 280 7.5.5.1 Вызовы для упакованных экземпляров
- 257 7.5.1 Списки аргументов
- 280 7.6 Первичные выражения
- 281 7.6.1 Литералы
- 281 7.6.2 Простые имена
- 283 7.6.2.1 Инвариантное значение в блоках
- 285 7.6.3 Выражения в скобках
- 285 7.6.4 Доступ к элементу
- 288 7.6.4.1 Идентичные простые имена и имена типов
- 288 7.6.4.2 Грамматическая неоднозначность
- 289 7.6.5 Выражения вызова
- 290 7.6.5.1 Вызов метода
- 294 7.6.5.2 Вызов метода расширения
- 299 7.6.5.3 Вызов делегата
- 299 7.6.6 Доступ к элементу массива
- 300 7.6.6.1 Доступ к массиву
- 301 7.6.6.2 Доступ к индексатору
- 302 7.6.7 this-доступ
- 303 7.6.8 Base-доступ
- 304 7.6.9 Постфиксные инкрементные и декрементные операции
- 306 7.6.10 Операция new
- 306 7.6.10.1 Выражения создания объекта
- 308 7.6.10.2 Инициализаторы объектов
- 311 7.6.10.3 Инициализаторы коллекций
- 313 7.6.10.4 Выражения создания массива
- 315 7.6.10.5 Выражения создания делегата
- 317 7.6.10.6 Выражение создания анонимного объекта
- 319 7.6.11 Операция typeof
- 322 7.6.12 Операции checked и unchecked
- 325 7.6.13 Выражения значений по умолчанию
- 325 7.6.14 Выражения анонимных методов
- 325 7.7 Унарные операции
- 326 7.7.1 Унарная операция плюс
- 326 7.7.2 Унарная операция минус
- 327 7.7.3 Логическая операция отрицания
- 327 7.7.4 Операция поразрядного дополнения
- 328 7.7.5 Префиксные инкрементные и декрементные операции
- 329 7.7.6 Выражения приведения
- 331 7.8 Арифметические операции
- 331 7.8.1 Операция умножения
- 333 7.8.2 Операция деления
- 334 7.8.3 Операция взятия остатка от деления
- 336 7.8.4 Операция сложения
- 339 7.8.5 Операция вычитания
- 341 7.9 Операции сдвига
- 342 7.10 Операции отношения и операции проверки типа
- 343 7.10.1 Операции сравнения для целочисленных типов
- 344 7.10.2 Операции сравнения для типов с плавающей точкой
- 346 7.10.3 Операции сравнения для десятичного типа
- 346 7.10.4 Операции равенства для булевского типа
- 346 7.10.5 Операции сравнения для перечислений
- 347 7.10.6 Операции равенства для ссылочных типов
- 349 7.10.7 Операции равенства для строкового типа
- 349 7.10.8 Операции равенства для типов делегатов
- 350 7.10.9 Операции равенства и константа null
- 350 7.10.10 Операция is
- 351 7.10.11 Операция as
- 353 7.11 Логические операции
- 353 7.11.1 Логические операции для целочисленных типов
- 354 7.11.2 Логические операции для перечислений
- 354 7.11.3 Булевские логические операции
- 354 7.11.4 Обнуляемые булевские логические операции
- 355 7.12 Условные логические операции
- 356 7.12.1 Булевские условные логические операции
- 356 7.12.2 Определенные пользователем условные логические операции
- 357 7.13 Операция объединения с нулем
- 359 7.14 Условная операция
- 361 7.15 Выражения анонимных функций
- 363 7.15.1 Сигнатуры анонимной функции
- 364 7.15.2 Тело анонимной функции
- 365 7.15.3 Разрешение перегрузки
- 366 7.15.4 Анонимные функции и динамическое связывание
- 366 7.15.5 Внешние переменные
- 366 7.15.5.1 Захваченные внешние переменные
- 367 7.15.5.2 Инстанцирование локальных переменных
- 370 7.15.6 Вычисление выражений анонимных функций
- 370 7.16 Выражения запроса
- 372 7.16.1 Неоднозначность в выражениях запроса
- 373 7.16.2 Преобразование выражений запроса
- 374 7.16.2.1 Конструкции select и GroupBy с продолжениями
- 375 7.16.2.2 Явно определенные типы переменных диапазона
- 376 7.16.2.3 Вырожденные выражения запросов
- 376 7.16.2.4 Конструкции from, let, where, join и orderby
- 380 7.16.2.5 Конструкции select
- 380 7.16.2.6 Конструкция GroupBy
- 380 7.16.2.7 Прозрачные идентификаторы
- 382 7.16.3 Паттерн выражения запроса
- 384 7.17 Операции присваивания
- 385 7.17.1 Простое присваивание
- 388 7.17.2 Сложное присваивание
- 389 7.17.3 Присваивание событий
- 390 7.18 Выражения
- 390 7.19 Константные выражения
- 392 7.20 Булевские выражения
- 236 7.1 Классификация выражений
- 393 Глава 8 Операторы
- 393 8.1 Конечные точки и достижимость
- 396 8.2 Блоки
- 396 8.2.1 Списки операторов
- 397 8.3 Пустой оператор
- 399 8.4 Помеченные операторы
- 400 8.5 Операторы объявления
- 400 8.5.1 Объявление локальных переменных
- 403 8.5.2 Объявление локальных констант
- 404 8.6 Операторы-выражения
- 405 8.7 Операторы выбора
- 405 8.7.1 Оператор if
- 406 8.7.2 Оператор switch
- 411 8.8 Операторы цикла
- 411 8.8.1 Оператор while
- 412 8.8.2 Оператор do
- 413 8.8.3 Оператор for
- 414 8.8.4 Оператор foreach
- 420 8.9 Операторы перехода
- 421 8.9.1 Оператор break
- 422 8.9.2 Оператор continue
- 423 8.9.3 Оператор goto
- 425 8.9.4 Оператор return
- 425 8.9.5 Оператор throw
- 427 8.10 Оператор try
- 432 8.11 Операторы checked и unchecked
- 432 8.12 Оператор lock
- 434 8.13 Оператор using
- 438 8.14 Оператор yield
- 441 Глава 9 Пространства имен
- 441 9.1 Единица компиляции
- 442 9.2 Объявления пространств имен
- 444 9.3 Внешние псевдонимы
- 445 9.4 Директивы using
- 445 9.4.1 Using-директива псевдонима
- 448 9.4.2 Using-директива пространства имен
- 450 9.5 Элементы пространства имен
- 450 9.6 Объявление типов
- 451 9.7 Спецификатор псевдонима пространства имен
- 453 9.7.1 Уникальность псевдонимов
- 454 Глава 10 Классы
- 454 10.1 Объявления классов
- 454 10.1.1 Модификаторы класса
- 455 10.1.1.1 Абстрактные классы
- 456 10.1.1.2 Бесплодные классы
- 457 10.1.1.3 Статические классы
- 458 10.1.2 Модификатор partial
- 458 10.1.3 Параметры-типы
- 459 10.1.4 Спецификация базового класса
- 459 10.1.4.1 Базовые классы
- 462 10.1.4.2 Реализации интерфейсов
- 462 10.1.5 Ограничения на параметры-типы
- 468 10.1.6 Тело класса
- 454 10.1.1 Модификаторы класса
- 468 10.2 Частичные типы
- 469 10.2.1 Атрибуты
- 470 10.2.2 Модификаторы
- 470 10.2.3 Параметры-типы и ограничения
- 471 10.2.4 Базовый класс
- 471 10.2.5 Базовые интерфейсы
- 472 10.2.6 Элементы
- 473 10.2.7 Частичные методы
- 477 10.2.8 Привязка имен
- 478 10.3 Элементы класса
- 479 10.3.1 Тип экземпляра
- 480 10.3.2 Элементы сконструированных типов
- 482 10.3.3 Наследование
- 483 10.3.4 Модификатор new
- 484 10.3.5 Модификаторы доступа
- 484 10.3.6 Составляющие типы
- 484 10.3.7 Статические элементы и элементы экземпляра
- 486 10.3.8 Вложенные типы
- 486 10.3.8.1 Полные имена
- 486 10.3.8.2 Объявления вида доступа
- 487 10.3.8.3 Скрытие
- 488 10.3.8.4 this-доступ
- 489 10.3.8.5 Доступ к закрытым и защищенным элементам охватывающего типа
- 490 10.3.8.6 Вложенные типы в обобщенных классах
- 491 10.3.9 Зарезервированные имена элементов
- 492 10.3.9.1 Имена элементов, зарезервированные для свойств
- 493 10.3.9.2 Имена элементов, зарезервированные для событий
- 493 10.3.9.3 Имена элементов, зарезервированные для индексаторов
- 493 10.3.9.4 Имена элементов, зарезервированные для деструкторов
- 493 10.4 Константы
- 496 10.5 Поля
- 497 10.5.1 Статические поля и поля экземпляра
- 498 10.5.2 Поля, доступные только для чтения
- 499 10.5.2.1 Использование статических полей, доступных только для чтения, вместо констант
- 500 10.5.2.2 Управление версиями констант и статических полей, доступных только для чтения
- 501 10.5.3 Асинхронно-изменяемые поля
- 503 10.5.4 Инициализация полей
- 503 10.5.5 Инициализаторы переменных
- 504 10.5.5.1 Инициализация статических полей
- 506 10.5.5.2 Инициализация полей экземпляра
- 506 10.6 Методы
- 509 10.6.1 Параметры метода
- 511 10.6.1.1 Параметры-значения
- 511 10.6.1.2 Параметры-ссылки
- 512 10.6.1.3 Выходные параметры
- 514 10.6.1.4 Параметры-массивы
- 517 10.6.2 Статические методы и методы экземпляра
- 517 10.6.3 Виртуальные методы
- 520 10.6.4 Переопределенные методы
- 523 10.6.5 Бесплодные методы
- 524 10.6.6 Абстрактные методы
- 526 10.6.7 Внешние методы
- 527 10.6.8 Частичные методы
- 527 10.6.9 Методы расширения
- 529 10.6.10 Тело метода
- 530 10.6.11 Перегрузка методов
- 509 10.6.1 Параметры метода
- 530 10.7 Свойства
- 531 10.7.1 Статические свойства и свойства экземпляра
- 532 10.7.2 Коды доступа
- 538 10.7.3 Автоматически реализуемые свойства
- 540 10.7.4 Доступность
- 541 10.7.5 Виртуальные, бесплодные, переопределенные и абстрактные коды доступа
- 544 10.8 События
- 546 10.8.1 События, подобные полям
- 548 10.8.2 Коды доступа событий
- 549 10.8.3 Статические события и события экземпляра
- 550 10.8.4 Виртуальные, бесплодные, переопределенные и абстрактные коды доступа
- 551 10.9 Индексаторы
- 555 10.9.1 Перегрузка индексаторов
- 555 10.10 Операции
- 557 10.10.1 Унарные операции
- 558 10.10.2 Бинарные операции
- 559 10.10.3 Операции преобразования
- 563 10.11 Конструкторы экземпляра
- 564 10.11.1 Инициализаторы конструктора
- 565 10.11.2 Инициализаторы переменных экземпляра
- 565 10.11.3 Выполнение конструктора
- 568 10.11.4 Конструкторы по умолчанию
- 568 10.11.5 Закрытые конструкторы
- 569 10.11.6 Необязательные параметры конструкторов экземпляра
- 570 10.12 Статические конструкторы
- 573 10.13 Деструкторы
- 575 10.14 Итераторы
- 575 10.14.1 Интерфейсы-перечислители
- 576 10.14.2 Перечислимые интерфейсы
- 576 10.14.3 Результирующий тип
- 576 10.14.4 Объекты-перечислители
- 577 10.14.4.1 Метод MoveNext
- 579 10.14.4.2 Свойство Current
- 579 10.14.4.3 Метод Dispose
- 579 10.14.5 Перечислимые объекты
- 580 10.14.5.1 Метод GetEnumerator
- 580 10.14.6 Пример реализации
- 454 10.1 Объявления классов
- 589 Глава 11 Структуры
- 590 11.1 Объявления структур
- 590 11.1.1 Модификаторы структур
- 591 11.1.2 Модификатор partial
- 591 11.1.3 Интерфейсы структуры
- 591 11.1.4 Тело структуры
- 591 11.2 Элементы структуры
- 592 11.3 Различия между классами и структурами
- 592 11.3.1 Значимая семантика
- 594 11.3.2 Наследование
- 594 11.3.3 Присваивание
- 595 11.3.4 Значения по умолчанию
- 595 11.3.5 Упаковка и распаковка
- 598 11.3.6 Значение this
- 598 11.3.7 Инициализаторы полей
- 599 11.3.8 Конструкторы
- 600 11.3.9 Деструкторы
- 600 11.3.10 Статические конструкторы
- 601 11.4 Примеры структур
- 601 11.4.1 Целочисленный тип для базы данных
- 604 11.4.2 Тип boolean для базы данных
- 590 11.1 Объявления структур
- 607 Глава 12 Массивы
- 607 12.1 Типы массивов
- 608 12.1.1 Тип System.Array
- 608 12.1.2 Массивы и обобщенный интерфейс IList
- 610 12.2 Создание массива
- 610 12.3 Доступ к элементам массива
- 610 12.4 Элементы типа массива
- 610 12.5 Ковариантность массивов
- 612 12.6 Инициализаторы массива
- 607 12.1 Типы массивов
- 614 Глава 13 Интерфейсы
- 614 13.1 Объявления интерфейсов
- 615 13.1.1 Модификаторы интерфейса
- 615 13.1.2 Модификатор partial
- 616 13.1.3 Списки параметров вариантного типа
- 616 13.1.3.1 Безопасность вариантности
- 617 13.1.3.2 Преобразование вариантности
- 618 13.1.4 Базовые интерфейсы
- 619 13.1.5 Тело интерфейса
- 620 13.2 Элементы интерфейса
- 621 13.2.1 Методы интерфейса
- 622 13.2.2 Свойства интерфейса
- 622 13.2.3 События интерфейса
- 623 13.2.4 Индексаторы интерфейса
- 623 13.2.5 Доступ к элементам интерфейса
- 625 13.3 Полные имена элементов интерфейса
- 626 13.4 Реализации интерфейсов
- 628 13.4.1 Явные реализации элементов интерфейса
- 631 13.4.2 Уникальность реализованных интерфейсов
- 632 13.4.3 Реализация обобщенных методов
- 633 13.4.4 Сопоставление интерфейсов
- 637 13.4.5 Наследование реализаций интерфейсов
- 638 13.4.6 Повторная реализация интерфейса
- 640 13.4.7 Абстрактные классы и интерфейсы
- 614 13.1 Объявления интерфейсов
- 642 Глава 14 Перечисления
- 642 14.1 Объявление перечисления
- 643 14.2 Модификаторы перечисления
- 644 14.3 Элементы перечисления
- 646 14.4 Тип System.Enum
- 647 14.5 Значения перечислений и операции
- 648 Глава 15 Делегаты
- 649 15.1 Объявления делегатов
- 652 15.2 Совместимость делегатов
- 652 15.3 Создание экземпляра делегата
- 653 15.4 Вызов делегата
- 657 Глава 16 Исключения
- 658 16.1 Причины исключений
- 659 16.2 Класс System.Exception
- 659 16.3 Как обрабатываются исключения
- 661 16.4 Распространенные классы исключений
- 663 Глава 17 Атрибуты
- 664 17.1 Классы атрибутов
- 664 17.1.1 Использование атрибутов
- 666 17.1.2 Позиционные и именованные параметры
- 667 17.1.3 Типы параметров атрибута
- 667 17.2 Спецификация атрибута
- 674 17.3 Экземпляры атрибутов
- 674 17.3.1 Компиляция атрибута
- 674 17.3.2 Получение экземпляра атрибута во время выполнения
- 675 17.4 Зарезервированные атрибуты
- 675 17.4.1 Атрибут AttributeUsage
- 676 17.4.2 Атрибут Conditional
- 676 17.4.2.1 Условные методы
- 679 17.4.2.2 Классы условных атрибутов
- 680 17.4.3 Атрибут Obsolete
- 682 17.5 Атрибуты для взаимодействия
- 682 17.5.1 Взаимодействие с компонентами COM и Win32
- 682 17.5.2 Взаимодействие с другими языками .NET
- 682 17.5.2.1 Атрибут IndexerName
- 664 17.1 Классы атрибутов
- 683 Глава 18 Небезопасный код
- 684 18.1 Небезопасные контексты
- 686 18.2 Типы указателей
- 690 18.3 Фиксированные и перемещаемые переменные
- 690 18.4 Преобразования указателей
- 692 18.4.1 Массивы указателей
- 693 18.5 Использование указателей в выражениях
- 694 18.5.1 Разыменование указателей
- 694 18.5.2 Доступ к элементу объекта через указатель
- 696 18.5.3 Доступ к элементу через указатель
- 696 18.5.4 Операция получения адреса
- 698 18.5.5 Инкремент и декремент указателей
- 698 18.5.6 Арифметика указателей
- 699 18.5.7 Сравнение указателей
- 699 18.5.8 Операция sizeof
- 700 18.6 Оператор fixed
- 705 18.7 Буферы фиксированного размера
- 706 18.7.1 Объявления буферов фиксированного размера
- 707 18.7.2 Использование буферов фиксированного размера в выражениях
- 708 18.7.3 Проверка явного присваивания
- 709 18.8 Выделение памяти в стеке
- 710 18.9 Динамическое выделение памяти
- 713 Приложение А Документирующие комментарии
- 713 А.1 Введение
- 715 А.2 Рекомендуемые теги
- 715 А.2.1 <c>
- 716 A.2.2 <code>
- 716 A.2.3 <example>
- 716 A.2.4 <exception>
- 717 A.2.5 <include>
- 718 A.2.6 <list>
- 719 A.2.7 <para>
- 719 A.2.8 <param>
- 720 A.2.9 <paramref>
- 720 A.2.10 <permission>
- 721 A.2.11 <remark>
- 721 A.2.12 <returns>
- 721 A.2.13 <see>
- 722 A.2.14 <seealso>
- 722 A.2.15 <summary>
- 723 A.2.16 <value>
- 723 A.2.17 <typeparam>
- 723 A.2.18 <typeparamref>
- 724 A.3 Обработка файла документации
- 724 A.3.1 Формат ID-строки
- 725 A.3.2 Примеры ID-строк
- 729 A.4 Пример
- 729 A.4.1 Исходный код на C#
- 732 A.4.2 Результирующий XML
- 736 Приложение Б Грамматика
- 736 Б.1 Лексическая грамматика
- 736 Б.1.1 Символы конца строки
- 736 Б.1.2 Комментарии
- 737 Б.1.3 Пробельные символы
- 737 Б.1.4 Лексемы
- 738 Б.1.5 Управляющие последовательности Unicode
- 738 Б.1.6 Идентификаторы
- 739 Б.1.7 Ключевые слова
- 739 Б.1.8 Литералы
- 741 Б.1.9 Знаки операций и пунктуации
- 741 Б.1.10 Директивы препроцессора
- 744 Б.2 Синтаксическая грамматика
- 744 Б.2.1 Основные понятия
- 744 Б.2.2 Типы
- 746 Б.2.3 Переменные
- 746 Б.2.4 Выражения
- 753 Б.2.5 Операторы
- 757 Б.2.6 Пространства имен
- 758 Б.2.7 Классы
- 765 Б.2.8 Структуры
- 766 Б.2.9 Массивы
- 766 Б.2.10 Интерфейсы
- 767 Б.2.11 Перечисления
- 768 Б.2.12 Делегаты
- 768 Б.2.13 Атрибуты
- 770 Б.3 Расширения грамматики для небезопасного кода
- 736 Б.1 Лексическая грамматика
- 773 Приложение В Ссылки
Инструкция как скачать книгу А. Хейлсберг, М. Торгерсен, С. Вилтамут, П. Голд: Язык программирования C#. Классика Computers Science в форматах DjVu, PDF, DOC или fb2 совершенно бесплатно.