Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 6
Текст из файла (страница 6)
Делегаты и события — это конструкции, используемые для регистрации методов обратного вызова, которые вызываются при их инициации. Обычно они привязываются к некоторому где-то определенному методу. Но благодаря анонимным методам, код делегатов или событий можно определять методом встраивания — прямо в той точке, где делегат или событие устанавливается. Это удобно, если делегат просто должен выполнить небольшой кусочек работы, для которого определение отдельного метода было бы избыточно.
Что еще лучше, так это то. что тело анонимного метода имеет доступ ко всем переменным, находящимся в контексте той точки, где этот метод определенз. Анонимные методы подробно рассматриваются в главе 10. Лямбдавыражения — новшество в С№ 3.0 — призваны прийти на замену анонимным методам, и позволяют писать более читабельный код. В С№ 2.0 появилась поддержка итераторов. Любой, кто знаком со стандартной библиотекой шаблонов С++ !8)апбагб Тешр1а!е агату — 8ТЬ), знаком также с итераторами и приносимой ими пользой.
В С№ обычно используется оператор г о ге а сЬ для выполнения прохода !итерации) по объекту, ведущему себя как коллекция. Этот объект коллекции При работе с С++/С1Л, стандартизованным в Есша-372 и впервые доступным в Ч!зла) 8!ос)!о 2005, можно совместно использовать обобщения и шаблоны. Это называется замьосанием !с1озпге) яли захеатпом переменных. 26 Глава! должен реализовывать интерфейс 1епикегаЬ1е, включающий метод Регепииегагог. Реализация метода Рескповегагог для контейнерных типов обычно очень утомительиа. Однако при использовании итераторов С№ реализация этого метода становится элементарной.
Более подробная информация об итераторах дается в главе 9. И, наконец, в С№ 2.0 была добавлена поддержка часпшчных гпипоэ (рагг1а1 гуреэ). До появления С№ 2.0 вы должны были определять каждый класс С№ целиком в одном файле (также называемом единицей комлиляшги). Это требование было снято для того, чтобы можно было создавать "скелетиый" код. Например, с помощью многочисленных мастеров 1г!эпа) ЗШб!о можно генерировать такие полезные вещи, как типы-наследники зузееи. РаТа.
Рзсазес, позволяющие обращаться к информации в базе данных. До появления С№ 2.0 вносить изменения в сгеиерироваииый код было проблематично. Нужно было либо наследоваться от него, либо редактировать автоматически сгенерированный код. Редактирование сгенерированного кода — дело рискованное, поскольку внесенные изменения обычно теряются после того, как мастер по той или иной причине повторно сгеиерирует код. Частичные типы решили эту проблему, поскольку теперь можно помещать сгенерированный код в отдельный файл, так что вносимые изменения ие будут теряться после его перегеиерации.
Чтобы увидеть отличный пример применения частичиых типов, загляните в код, сгенерированный в результате создания приложения %Чпдотгэ гоппэ в 1Г1эпэ( ЗГпФо. Подробнее о частичных типах рассказывается в главе 4. Обзор средств, добавленных в СФ 3.0 Язык С№ 3.0 включает иесколько великолепных новых средств. Большинство из иих предназначено для поддержки языка интегрированных запросов (Ьапдпаде 1птедга!еб йогу — Ы1ЧЯ). Тем ие менее, все оии исключительно полезны и при использовании отдельно, вие контекста Ы1Чй. Многие из иих упрощают применение приемов фуикциоиальиого программирования.
Теперь С№ поддерживает неявно типизированные локальиые переменные за счет испольэоваиия ключевого слова чаг. Важно отметить, что эти переменные ие являются бестиповыми; скорее, их тип выводится во время компиляции. Подробнее о иих читайте в главе 3. Хотелось ли вам когда-нибудь создать простой тип для хранения взаимосвязанных даииых, ио без утомительной необходимости создания целого нового класса7 В случаях подобного рода иа помощь приходит новая поддержка анонимных типов, которая избавляет от этой обяэаииости. За счет применения анонимных типов можно определять и создавать экземпляры типа в одном составном операторе. Об анонимных типах речь пойдет в главе 4. Автоматически реализуемые свойства — еще одно полезное новое средство для сокращеиия объема клавиатурного ввода и снижения вероятности внесения ошибок. Сколько раэ вам приходилось просто объявлять класс для хранения нескольких фрагментов данных и испытывать досаду от необходимости набирать большой объем кода средств доступа (эег и дег) к этим даииым7 естественно, так нужно было поступать из-за того, что это полезный прием инкапсуляции.
К счастью, теперь автоматически реализуемые свойства позволили значительно сократить объем рутинной работы, иеобходимой для определения свойств в типах. Подробнее об этом читайте в главе 4. Если говорить об удобстве, то стоит вспомнить еще и о том, что в С№ 3.0 появились два новых средства, помогающие создавать и инициализировать экземпляры объектов. За счет применения ииициалиэаторов объектов и коллекций можно создавать экземпляры и ииициализировать как объект, так и коллекцию в одиом составном операторе. Ииициализаторы объектов рассматриваются в главе 4, а ииициэлизаторы коллекций — в главе 9.
В С№ 2.0 были представлены определения частичных классов для облегчения примеиеиия генераторов кода. В С№ 3.0 к этому добавились частичные методы. Применяя Обзор С№ 27 частичные методы, генератор кода может объявлять сигнатуру метода, а потребитель этого сгенерированного кода — тот, кто создает остальную часть определения частичного класса — может решать, реализовывать его или нет. Частичные методы рассматриваются в главе 4.
Расширяющие методы — одно из самых впечатляющих новых средств. На первый взгляд, это просто статические методы, которые могут быть вызваны так, будто они являются методами экземпляра. Они не имеют никакого специального доступа к экземпляру, с которым работают, так что в этом отношении они являются простыми статическими методами.
Однако их синтаксис позволяет программировать в более функциональной манере, в результате получая более ясный и читабельный код. Теме расширяющих методов и тому, что с ними можно делать, посвящена целая глава 14. Возможно, еще более впечатляющим новшеством, чем расширяющие методы, является поддержка лямбда-выражений. Лямбда-выражения вытесняют собой анонимные методы. Другими словами, если бы лямбда-выражения появились еще в С№ 2.0, то необходимость в анонимных методах вообще бы не возникла. Вдобавок лямбда-выражения дают много больше, чем анонимные методы, поскольку они могут быть преобразованы как в делегаты, так и в деревья выражений. Лямбда-выражения рассматриваются в главе 15. Движущей силой всех новых средств С№ 3.0 можно считать язык ЫХЯ, который воплотил в себе их все — особенно расширяющие методы, лямбда-выражения и анонимные типы.
Также он добавил некоторые ключевые слова языка. позволяющие кодировать интуитивно понятные операторы запросов, гладко заполняя брешь между объектно-ориентированным миром и миром данных. Ы1ЧЯ можно применять для доступа к данным из множества источников. Среда У!эиа) 3!пг)!о предоставляет возможность использования ЫгчЯ на встроенных объектах коллекций. хранилищах данных БЯЬ и ХМЬ. Вскоре ожидается поддержка множества других источников данных, как от М!сгоэой, так и от независимых поставщиков. Например, Ыг1й можно будет применять для подключения к ц!м! (уу!пс)отгэ мапаяешеп! !пэгпипепгайоп — инструментальные средства управления средой %г!пбоиэ), объектной модели документа !Росшпеп! ОЬ)ес! Мобе!— ВОМ) и тд.
Вдобавок в разработке находятся реализации, которые позволят использовать Ыгчй для осуществления поиска с помощью популярных веб-сайтов, таких как Оооя1е и Р!!с)гг. ЫХЯ посвящена глава 16. Обзор новых средств СФ 4.0 С определенной долей уверенности можно утверждать, что все новые средства С№ 4.0 касаются возможности взаимодействия. Самым важным средством является новый тип с!упавзс.
Использование типа бупаа№с позволяется оставить в прошлом все сложности взаимодействия с объектами СОМ или типами, созданными динамическими языками .НЕТ. Язык Н!эиа) Ваз!с некоторое время опережал С№ в отношении возможности взаимодействия. Но с появлением С№ 4.0 это отставание преодолено.
Тип с!упап№с подробно рассматривается в главе 17. Каждый раз, когда команда разработчиков языка С№ приступает к работе над новым средством. им приходится выбирать из целого списка идей и запросов. Некоторое время в этом списке присутствовали значения аргументов методов по умолчанию, но до появления С№ 4.0 они не были реализованы. Однако потребности во взаимодействии ускорили их реализацию. Наличие значений аргументов по умолчанию еще более облегчило взаимодействие с типами СОМ.
Тем не менее, есть еще одно средство, которое идет рука об руку со значениями аргументов по умолчанию — именованные аргументы. В С№ 4.0 можно передавать аргументы методам в виде именованных аргументов, в результате чего порядок аргументов в списке становится несущественным. Это уже неплохо зву- 28 Глава 1 чит, а еще большие преимущества данное средство проявляет в сочетании со значениями аргументов по умолчанию и возможностью взаимодействия с СОМ. Нередко интерфейсы автоматизации СОМ содержат методы с множеством параметров, которые часто являются необязательными.
Благодаря механизму аргументов по умолчанию, исчезает необходимость указывать значения для всех необязательных параметров. Кроме того, используя именованные аргументы, можно выбирать, какие именно из аргументов в списке умолчанию нужно предоставить. Завершает список новых средств С№ 4.0 вариантность. В эту версию была добавлена поддержка новых контекстных ключевых слов, которые позволяют объявлять ковариантные и контравариантные обобщенные интерфейсы и делегаты. Объявить интерфейс как ковариантный или контравариантный можно за счет декорирования обобщенных аргументов ключевыми словами з.п и оис. Это позволяет проводить интуитивно понятные неявные ковариантные преобразования ссылок на 1ЕпопегаЬ1е<з С гзпо> в ссылки на 1ЕпшпегаЬ1е<оЬ) есг>. Подобные действия были невозможны до появления С№ 4.0.











