Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 3
Текст из файла (страница 3)
Хотя многие из этих шаблонов знакомы программистам на С++ и Зача, все же некоторые уникальны для . ХЕТ и его общеязыковой исполняющей среды (Согпшоп 1япяцаяе Кипцше — СЬК). В последующих главах будет показано, как применять эти обязательные идиомы и приемы проектирования для гладкой интеграции приложений С№ с исполняющей системой .ХЕТ, причем основное внимание сосредоточивается на новых средствах С№ 4.0.
Шаблоны проектирования документируют передовой опыт в разработке приложений, который накоплен множеством программистов в течение длительного времени. Фактически платформа .ХЕТ г'гашевог)г сама по себе реализует многие хорошо известные шаблоны проектирования. К тому же последние три версии .ХЕТ г гэгпеиог)г и две версии С№ высветили многие новые идиомы и передовые приемы. Вы будете знакомиться с ними на протяжении всей книги.
К тому же важно отметить, что этот бесценный набор технологий постоянно эволюционирует. С появлением С№ 3.0 появилась возможность легко включать приемы функционального программирования, используя лямбда-выражения, расширяющие методы и язык интегрированных запросов (1апяпаяе 1пгеягагед Янгу — ыхЯ). лямбда-выражения облегчают объявление и создание экземпляров делегатов функций в одном месте. Вдобавок к лямбда-выражениям появилась возможность создавать функционалы — функции.
принимающие в качестве аргументов функции и обычно возвращающие другие функции. Несмотря на то что технику функционального программирования можно было реализовать на С№ (хотя и с некоторыми трудностями), новые средства языка С№ 3.0 обеспечили среду, в которой функциональное программирование может органично переплетаться с обычным стилем императивного программирования С№. ЫХЯ позволяет выразить операции запросов данных (которые обычно по природе своей являются функциональными), используя естественный для языка синтаксис.
Однажды увидев. как работает ЫХЯ, вы поймете, что можете сделать намного больше, чем простые запросы данных — его можно использовать для реализации сложных функциональных программ. .ХЕТ и СЬК предоставляют уникальную и стабильную межплатформенную исполняющую среду. С№ — только один из языков, ориентированных на эту мощную исполняющую систему. Вы обнаружите, что многие из приемов, описанных в этой книге, также применимы к любому языку, ориентированному на исполняющую систему .
ХЕТ. Введение 17 Тем, у кого есть серьезный опыт работы на С++, и кто знаком с такими концепциями, как канонические формы С++, безопасность исключений, КАП 1Кезоцгсе Асци!з!поп 1з 1п!ВаИзайоп — захват ресурсов является инициализацией). а также корректность констант, в книге будет показано, как применить все эти концепции в С№. Если вы — программист на,1ача или ч!зиа! Ваз!с.
потративший годы на разработку собственного набора приемов, и хотите знать, как эффективно применить их в С№, вы найдете здесь ответ и на этот вопрос. Как вы вскоре убедитесь, для того, чтобы стать экспертом в С№, не нужно тратить годы на приобретение опыта методом проб и ошибок. Вам просто нужно изучить правильные вещи и правильные способы того, как их следует делать. Именно потому была написана эта книга.
Как организована эта книга Предполагается, что вы уже имеете практический опыт работы с некоторым объектно-ориентированным языком, таким как С++. дача или ч!зиа) Ваз!с .1чЕТ. Поскольку язык С№ унаследовал свой синтаксис от С++ и дача, в книге не дается полное описание синтаксиса С№, за исключением тех моментов, в которых он отличается от С++ или .1ача. Если вы уже немного знаете С№, то можете лишь пролистать илн вообще пропустить главы 1-3. ° В главе 1, "Обзор С№", дается первоначальное представление о том, как выглядит простое приложение С№, и предлагается описание некоторых базовых отличий среды программирования С№ от среды "родного" С++.
° В главе 2, "С№ и СЬК", развивается тема, поднятая в главе 1. Благодаря ней, вы кратко ознакомитесь с управляемой средой, внутри которой выполняется приложение С№. В главе рассказывается о сборках — базовых строительных блоках приложений, в которые компилируются файлы кода С№. Вдобавок будет показано, как метаданные делают сборки самодостаточными. ° В главе 3, "Обзор синтаксиса С№", предлагается описание синтаксиса языка С№.
Будут продемонстрированы две фуцдаментальных группы типов СЬК: типы значений и ссылочиые типы. Кроме того, будут описаны пространства имен и то, как их можно использовать для логического разделения типов и функциональности внутри приложений. ° Главы с 4 по 13 содержат углубленное описание применения полезных идиом, шаблонов проектирования и передовых приемов в программах и проектах С№, Хотя материал этих глав и выстроен в логическом порядке, но неизбежно в одних главах будут присутствовать ссылки на приемы или темы, описанные в других !последующих) главах.
Избежать таких ситуаций почти невозможно, однако они сведены к минимуму. ° Глава 4, "Классы, структуры и объекты". содержит подробности определения типов в С№. Вы узнаете больше о типах значений и ссылочных типах в С1.К. Также кратко рассматривается встроенная поддержка интерфейсов внутри СЬК и С№. Вы увидите, как работает наследование в С№, и узнаете, что каждый объект наследуется от типа зуз сея. оь)ее с. Эта глава также содержит исчерпывающую информацию об управляемой среде и о том, что нужно знать для определения удобных для нее типов. Начатое в этой главе обсуждение продолжается в последующих главах.
° !!лава б, "Интерфейсы и контракты", посвящена интерфейсам и роли, которую они играют в языке С№. Интерфейсы представляют собой контракт функционально- 18 Введение сти, которую могут реализовывать типы. Вы узнаете о многих способах реализации интерфейсов типами, а также о том, как исполняющая система выбирает, какие методы должны вызываться при обращении к методам интерфейса. В главе 6, "Перегрузка операций", детализируются способы создания специальной функциональности встроенных операций языка С№, когда они применяются к собственным типам. Вы увидите, как перегружать действие операций, хотя не все управляемые языки, которые компилируются в код для С1Л, способны пользоваться перегруженными операциями.
1Кава 7, "Безопасность и обработка исключений", посвящена средствам обработки исключений языка С№ и СЬЕ. Хотя синтаксис подобен С++, создание безопасного и нейтрального в отношении исключений кода не так-то просто — даже сложнее создания безопасного к исключениям кода на "родном" С++. Вы увидите, что написание устойчивого к сбоям, безопасного к исключениям кода вообще не требует применения конструкций сгу, свесь или Гтпз11у. Будут также описаны некоторые новые возможности, добавленные в исполняющую систему .1ЧЕТ 2.0, которые позволят создавать более устойчивый к сбоям код. В главе 8, "Работа со строками", описаны строки — первоклассный тип С1Я вЂ” и методы их эффективного применения в С№. Эначительная часть этой главы посвящена средствам строкового форматирования различных типов в .1нЕТ РгашевогК и тому, как заставить определяемые вами типы вести себя подобным образом за счет реализации интерфейса 1гогаассаь1е.
Дополнительно будут представлены средства глобализации каркаса и показано, как создавать собственные 0 о1г пгего Го для культур и регионов, о которых .1нЕТ РгэгпеюогК не имеет понятия. В главе 9, "Массивы, типы коллекций и итераторы", рассматриваются разнообразные массивы и типы коллекций, доступные в С№. Можно создавать два типа многомерных массивов наряду с собственными типами коллекций, используя служебные классы коллекций.
Будет показано, как определять прямые, обратные и двунаправленные итераторы, применяя новый синтаксис итераторов, введенный в С№ 2.0, так что типы коллекций смогут успешно работать с операторами Гогезсж В главе 10, "Делегаты, анонимные функции и события", демонстрируются механизмы, используемые внутри С№ для обеспечения обратных вызовов. В С№ обратные вызовы инкапсулируются в вызываемые объекты, которые называются делегалюми. Вдобавок, С№ 2.0 позволяет создавать делегаты с сокращенньэи синтаксисом, называемые анонимными функциями. Анонимные функции подобны лямбда-функциям в функциональном программировании. К тому же будет показано.
как на основе делегатов реализуется механизм уведомления публикации/ подписки на события, позволяя отделять источник события от его потребителя. В главе 11, "Обобщения", рассматривается, пожалуй, наиболее впечатляющее средство, появившееся в С№ 2.0 и СЬЕ. Тем, кто имел дело с шаблонами С++, обобщения покажутся знакомыми, хотя между ними есть немало фундаментальных отличий. С помощью обобщений можно создавать оболочку функциональности, внутри которой во время выполнения определяются более специфичные типы. Обобщения наиболее полезны для типов коллекций и обеспечивают значительную эффективность по сравнению с коллекциями из предыдущих версий .1ЧЕТ. Начиная с С№ 4.0, применение обобщенных типов стало еще более интуитивно понятным за счет поддержки ковариантности и контравариантности.
Теперь допускается присваивание одного обобщенного типа другому, что сокращает потребность в громоздких методах преобразований, которые требовались ранее. Введение 19 ° В главе 12, "Многопоточность в С№", показано то, что необходимо делать при создании многопоточных приложений в управляемой виртуальной исполняющей системе С№. Если вы знакомы с потоками в среде %Чп32, то заметите существенные отличия.












