C# 5.0. Справочник. Полное описание языка, 5-е издание

C# 5.0. Справочник. Полное описание языка, 5-е издание
Автор: Джозеф Албахари, Бен Албахари
Год: 2014
ISBN: 978-5-8459-1819-2
Страниц: 1008
Язык: Русский
Формат: PDF
Размер: 27 Мб

Download

Данное руководство, ставшее бестселлером, позволяет получить точные ответы практически на любые вопросы по C# 5.0 и .NET CLR. Уникально организованное по концепциям и сценариям использования, обновленное 5-е издание книги предлагает реорганизованные разделы, посвященные параллелизму, многопоточности и параллельному программированию, а также включает подробные материалы по новому средству C# 5.0 – асинхронным функциям.
Проверенная более чем 20 экспертами, в числе которых Эрик Липперт, Стивен Тауб, Крис Барроуз и Джон Скит, эта книга содержит все, что необходимо для освоения C# 5.0. Она широко известна как исчерпывающий справочник по языку. – Изучите основы языка C#, включая синтаксис, типы и переменные
– Исследуйте более сложные темы, такие как небезопасный код и вариантность типов
– Научитесь пользоваться языком LINQ благодаря трем посвященным ему главам
– Освойте контракты кода, динамическое программирование и параллельное программирование
– Научитесь работать со средствами .NET, в том числе с рефлексией, сборками, управлением памятью, безопасностью, вводом-выводом, XML, коллекциями, взаимодействием с сетью и собственной поддержкой взаимодействия.

+

Введение в C# и .NET Framework

C# представляет собой универсальный, безопасный к типам, объектно-ориентированный язык. Целью языка является повышение продуктивности работы программистов. Для этого в языке поддерживается баланс между простотой, выразительностью и
производительностью. Начиная с самой первой версии, главным архитектором языка C# был Андерс Хейлсберг (создатель Turbo Pascal и архитектор Delphi). Язык C# не зависит от платформы, но был написан для эффективной работы с платформой Microsoft .NET Framework.

Объектная ориентация

B C# реализована расширенная объектно-ориентированная парадигма, которая включает инкапсуляцию, наследование и полиморфизм. Инкапсуляция означает создание границы вокруг объекта, предназначенной для отделения внешнего (открытого)
поведения от внутренних (закрытых) деталей реализации. Ниже перечислены отличительные особенности языка C# с точки зрения объектной ориентации.

  • Унифицированная система типов. Фундаментальным строительным блоком в C# является инкапсулированная единица данных и функций, называющаяся типом. Язык C# имеет унифицированную систему типов, при которой все типы, в конечном счете, разделяют общий базовый тип. Это значит, что все типы, независимо от того, представляют они бизнес-объекты или примитивныесущности вроде чисел, разделяют один и тот же базовый набор функциональности. Например, экземпляр любого типа может быть преобразован в строку за счет вызова его метода ToString.
  • Классы и интерфейсы. B рамках традиционной объектно-ориентированной парадигмы единственной разновидностью типа является класс. B C# имеются многие другие виды типов, один из которых — интерфейс. Интерфейс похож на класс за исключением того, что он только описывает члены. Реализация для этих членов поступает из типов, реализующих интерфейс. Интерфейсы особенно полезны в сценариях, при которых требуется множественное наследование (в отличие от таких языков, как C++ и Eiffel, множественное наследование классов в C# не поддерживается).
  • Свойства, методы и события. B чистой объектно-ориентированной парадигме все функции являются методами (это случай Smalltalk). B C# методы — только одна разновидность функциичлена, и различают также свойства и события (помимо прочих). Свойства представляют собой функции-члены, которые инкапсулируют порцию состояния объекта, такую как цвет кнопки или текст метки. События — это функции-члены, которые упрощают выполнение действий при изменении состояния объекта.

Безопасность в отношении типов

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

Более конкретно, C# поддерживает статическую типизацию, при которой язык обеспечивает безопасность к типам во время компиляции. Это дополняет безопасность к типам, обеспечиваемую во время выполнения.

Статическая типизация позволяет избежать широкого множества ошибок еще до запуска программы. Она перекладывает ответственность за проверку того, что все типы в программе корректно работают друг с другом, с модульных тестов времени
выполнения на компилятор. B результате крупные программы становятся намного более простыми в управлении, более предсказуемыми и более надежными. Кроме того, статическая типизация позволяет инструментам наподобие IntelliSense в Visual Studio оказывать помощь при написании программы: так как тип заданной переменной известен, то известны и методы, которые можно вызывать для этой переменной.

Язык C# также позволяет частям кода быть динамически типизированными, для чего служит ключевое слово dynamic (появившееся в C# 4). Тем не менее C# остается преимущественно статически типизированным языком.

C# также называют строго типизированным языком, поскольку его правила типов (применяемые либо статически, либо во время выполнения) являются очень строгими. Например, невозможно вызвать функцию, которая спроектирована на прием целого числа, для числа с плавающей точкой, не выполнив предварительно явное преобразование числа с плавающей точкой в целое. Это помогает предотвратить ошибки. Строгая типизация также играет важную роль в обеспечении возможности запуска кода C# в песочнице — среде, в которой каждый аспект безопасности контролируется хостом. Важной особенностью песочницы является то, что вы не сможете произвольным образом разрушить состояние объекта, обойдя связанные с ним правила типов.

Управление памятью

При выполнении автоматического управления памятью C# полагается на исполняющую среду. Общеязыковая исполняющая среда (Common Language Runtime) имеет сборщик мусора, который выполняется как часть вашей программы, восстанавливая память, занятую объектами, ссылки на которые больше не существуют. Это снимает с программистов необходимость в явном освобождении памяти для объекта, устраняя проблему некорректных указателей, которая встречается в таких языках, как C++.

Язык C# не исключает указатели: он просто делает их необязательными при решении большинства задач программирования. Для “горячих” точек, критичных к производительности, и при реализации взаимодействия указатели могут использоваться, но это разрешено только в блоках, которые явно помечены как небезопасные.

Поддержка платформ

Язык C# обычно применяется для написания кода, который выполняется на платформах Windows. Хотя компания Microsoft стандартизировала C# через ECMA, общее количество ресурсов (как внутри, так и за пределами Microsoft), выделяемое для
поддержки C# на платформах, отличных от Windows, относительно мало. Это значит, что когда первостепенную роль играет поддержка множества платформ, разумным выбором являются такие языки, KaKjava. C учетом сказанного, C# может использоваться для написания межплатформенного кода в следующих сценариях.

  • Код C# может запускаться на сервере и генерировать HTML-разметку, которая может выполняться на любой платформе. Это в точности случай ASP.NET.
  • Код C# может запускаться в исполняющей среде, отличной от Microsoft Common Language Runtime. Наиболее ярким примером является проект Mono, который имеет собственный компилятор C#, а также исполняющую среду, запускаемую под управлением Linux, Solaris, Mac OS X и Windows.
  • Код C# может запускаться на хосте, который поддерживает Microsoft Silverlight (доступный для Windows и Mac OS X). Эта технология аналогична Adobe Flash Player.

Отношения C# и CLR

Язык C# зависит от исполняющей среды, оснащенной множеством функциональных средств, таких как автоматическое управление памятью и обработка исключений. Проектное решение, положенное в основу C#, точно соответствует проектному решению общеязыковой исполняющей среды (Common Language Runtime — CLR) от Microsoft, которая предоставляет указанные средства времени выполнения (хотя C# формально не зависит от CLR). Вдобавок система типов C# в точности соответствует системе
типов CLR (к примеру, обе системы разделяют одни и те же определения типов).

CLR и .NET Framework

Платформа .NET Framework состоит из CLR и обширного набора библиотек. Библиотеки включают библиотеки ядра (описываемые в этой книге; и прикладные библиотеки, которые зависят от библиотек ядра. Ha рис. 1.1 показан визуальный обзор этих библиотек (он также служит в качестве вспомогательного средства для навигации по книге).

CLR является исполняющей средой для выполнения управляемого кода. C# — один из множества управляемых языков, компилируемых в управляемый код. Управляемый код упаковывается в сборки, в форме либо исполняемого файла (.exe), либо библиотеки (.dll), вместе с информацией о типах, или метаданными.

Управляемый код представлен промежуточным языком (Intermediate Language — IL). Когда среда CLR загружает сборку, она преобразует IL в собственный код машины, такой как x86. Это преобразование осуществляется компилятором JIT Just-In-Time —
оперативный) в CLR. Сборка сохраняет почти все первоначальные конструкции исходного языка, что упрощает просмотр и даже генерацию кода динамическим образом.

CLR выступает в качестве хоста для многочисленных служб времени выполнения. Примеры этих служб включают управление памятью, загрузку библиотек и безопасность. Среда CLR не зависит от языка, позволяя разработчикам строить приложения
на множестве языков (например, C#, Visual Basic .NET, Managed C++, Delphi.NET, Chrome .NET J#).

Платформа .NET Framework содержит библиотеки для написания практически любого Windows- или веб-приложения. Обзор библиотек .NET Framework приведен в главе 5.

C# и Windows Runtime

C# 5.0 также взаимодействует с библиотеками WindowsRuntime (WinRT). WinRT — это интерфейс выполнения и исполняющая среда для доступа к библиотекам в независимой от языка объектно-ориентированной манере. Она поставляется в составе Windows 8 и является (кое в чем) расширенной версией модели компонентных объектов (Component Object Model — СОМ) от Microsoft (см. главу 25).

Операционная система Windows 8 поставляется с набором неуправляемых библиотек WinRT, которые служат инфраструктурой для сенсорных приложений в стиле Metro, доставляемых через магазин приложений Microsoft. (Термин WinRT также относится к таким библиотекам.) Библиотеки WinRT могут легко потребляться не только из C# и VB, но также из C++ nJavaScript.

Некоторые библиотеки WinRT могут также использоваться в обычных приложениях, не предназначенных для планшетов. Тем не менее, добавление зависимости от WinRT накладывает на приложение требование, чтобы минимальной версией OC была Windows 8. (И в будущем, принимая зависимость от следующей версии WinRT, придется обеспечивать для программы минимальную версию OC Windows 9.)

Библиотеки WinRT поддерживают новый пользовательский интерфейс Metro (для написания интерактивных сенсорных приложений), средства, специфичные для мобильных устройств (датчики, обмен текстовыми сообщениями и т.п.) и целый спектр ключевой функциональности, который частично перекрывает .NET Framework. Из-за такого перекрытия Visual Studio включает ссылочный профиль (набор ссылочных сборок .NET) для проектов Metro, который скрывает порции .NET Framework,
перекрываемые WinRT. Этот профиль также скрывает крупные порции .NET Framework, которые считаются ненужными для планшетных приложений (вроде доступа к базе данных). Магазин приложений Microsoft, который управляет распространением
программного обеспечения на устройства потребителей, отклоняет любую программу, которая пытается получить доступ к скрытому типу.