Полное руководство. С# 4.0 - Шилдт Герберт
Шрифт:
Интервал:
Закладка:
В C# имеется немало новых средств, которые будут подробно рассмотрены настраницах этой книги, но самое важное из них связано со встроенной поддержкойпрограммных компонентов. В действительности C# может считаться компонентноориентированным языком программирования, поскольку в него внедрена встроенная поддержка написания программных компонентов. Например, в состав C# входятсредства прямой поддержки таких составных частей программных компонентов, каксвойства, методы и события. Но самой важной компонентно-ориентированной особенностью этого языка, вероятно, является возможность работы в безопасной средемногоязыкового программирования.Развитие C
С момента выпуска исходной версии 1.0 развитие C# происходило быстро. Вскорепосле версии 1.0 корпорация Microsoft выпустила версию 1.1, в которую было внесенонемало корректив, но мало значительных возможностей. Однако ситуация совершенно изменилась после выпуска версии C# 2.0.
Появление версии 2.0 стало поворотным моментом в истории развития С#, поскольку в нее было введено много новых средств, в том числе обобщения, частичныетипы и анонимные методы, которые основательно расширили пределы возможностейи область применения этого языка, а также повысили его эффективность. После выпуска версии 2.0 "упрочилось" положение С#. Ее появление продемонстрировало также приверженность корпорации Microsoft к поддержке этого языка в долгосрочнойперспективе.
Следующей значительной вехой в истории развития C# стал выпуск версии 3.0.В связи с внедрением многих новых свойств в версии C# 2.0 можно было ожидать некоторого замедления в развитии С#, поскольку программистам требовалось время дляих освоения, но этого не произошло. С появлением версии 3.0 корпорация Microsoftвнедрила ряд новшеств, совершенно изменивших общее представление о программировании. К числу этих новшеств относятся, среди прочего, лямбда-выражения, языкинтегрированных запросов (LINQ), методы расширения и неявно типизированные переменные. Конечно, все эти новые возможности очень важны, поскольку они оказализаметное влияние на развитие данного языка, но среди них особенно выделяются две:язык интегрированных запросов (LINQ) и лямбда-выражения. Язык LINQ и лямбда-выражения вносят совершенно новый акцент в программирование на C# и еще глубжеподчеркивают его ведущую роль в непрекращающейся эволюции языков программирования.
Текущей является версия C# 4.0, о которой и пойдет речь в этой книге. Эта версияпрочно опирается на три предыдущие основные версии С#, дополняя их целым рядомновых средств. Вероятно, самыми важными среди них являются именованные и необязательные аргументы. В частности, именованные аргументы позволяют связыватьаргумент с параметром по имени. А необязательные аргументы дают возможностьуказывать для параметра используемый по умолчанию аргумент. Еще одним важнымновым средством является тип dynamic, применяемый для объявления объектов, которые проверяются на соответствие типов во время выполнения, а не компиляции.Кроме того, ковариантность и контравариантность параметров типа поддерживаетсяблагодаря новому применению ключевых слов in и out. Тем, кто пользуется модельюСОМ вообще и прикладными интерфейсами Office Automation API в частности, существенно упрощен доступ к этим средствам, хотя они и не рассматриваются в этойкниге. В целом, новые средства, внедренные в версии C# 4.0, способствуют дальнейшейрационализации программирования и повышают практичность самого языка С#.
Еще два важных средства, внедренных в версии 4.0 и непосредственно связанных с программированием на С#, предоставляются не самим языком, а средой .NETFramework 4.0. Речь идет о поддержке параллельного программирования с помощьюбиблиотеки распараллеливания задач (TPL) и параллельном варианте языка интегрированных запросов (PLINQ). Оба эти средства позволяют существенно усовершенствовать и упростить процесс создания программ, в которых применяется принцип параллелизма. И то и другое средство упрощает создание многопоточного кода, которыймасштабируется автоматически для использования нескольких процессоров, доступных на компьютере. В настоящее время широкое распространение подучили компьютеры с многоядерными процессорами, и поэтому возможность распараллеливать выполнение кода среди всех доступных процессоров приобретает все большее значениепрактически для всех, кто программирует на С#. В силу этого особого обстоятельствасредства TPL и PLINQ рассматриваются в данной книге.Связь C# со средой .NET Framework
Несмотря на то что C# является самодостаточным языком программирования, у негоимеется особая взаимосвязь со средой выполнения .NET Framework. Наличие такой взаимосвязи объясняется двумя причинами. Во-первых, C# первоначально предназначалсядля создания кода, который должен выполняться в среде .NET Framework. И во-вторых,используемые в C# библиотеки определены в среде .NET Framework. На практике этоозначает, что C# и .NET Framework тесно связаны друг с другом, хотя теоретически C#можно отделить от среды .NET Framework. В связи с этим очень важно иметь хотя бысамое общее представление о среде .NET Framework и ее значении для С#.О среде NET Framework
Назначение .NET Framework — служить средой для поддержки разработки и выполнения сильно распределенных компонентных приложений. Она обеспечивает совместное использование разных языков программирования, а также безопасность, переносимость программ и общую модель программирования для платформы Windows.Что же касается взаимосвязи с С#, то среда .NET Framework определяет два оченьважных элемента. Первым из них является общеязыковая среда выполнения (CommonLanguage Runtime — CLR). Это система, управляющая выполнением программ. Средипрочих преимуществ — CLR как составная часть среды .NET Framework поддерживаетмногоязыковое программирование, а также обеспечивает переносимость и безопасноевыполнение программ.
Вторым элементом среды .NET Framework является библиотека классов. Эта библиотека предоставляет программе доступ к среде выполнения. Так, если требуетсявыполнить операцию ввода-вывода, например вывести что-нибудь на экран, то дляэтой цели используется библиотека классов .NET. Для тех, кто только начинает изучать программирование, понятие класса может оказаться незнакомым. Оно подробноразъясняется далее в этой книге, а пока достаточно сказать, что класс — это объектно-ориентированная конструкция, помогающая организовать программы. Если программа ограничивается средствами, определяемыми в библиотеке классов .NET, тотакая программа может выполняться везде, где поддерживается среда выполнения.NET. А поскольку в C# библиотека классов .NET используется автоматически, то программы на С# заведомо оказываются переносимыми во все имеющиеся среды .NETFramework.Принцип действия CLR
Среда CLR управляет выполнением кода .NET. Действует она по следующему принципу. Результатом компиляции программы на C# является не исполняемый код, афайл, содержащий особого рода псевдокод, называемый Microsoft Intermediate Language,MSIL (промежуточный язык Microsoft). Псевдокод MSIL определяет набор переносимых инструкций, не зависящих от конкретного процессора. По существу, MSIL определяет переносимый язык ассемблера. Следует, однако, иметь в виду, что, несмотря накажущееся сходство псевдокода MSIL с байт-кодом Java, это все же разные понятия.
Назначение CLR — преобразовать промежуточный код в исполняемый код походу выполнения программы. Следовательно, всякая программа, скомпилированнаяв псевдокод MSIL, может быть выполнена в любой среде, где имеется реализация CLR.Именно таким образом отчасти достигается переносимость в среде .NET Framework.
Псевдокод MSIL преобразуется в исполняемый код с помощью JIT-компилятора.Сокращение JIT означает точно в срок и отражает оперативный характер данного компилятора. Процесс преобразования кода происходит следующим образом. При выполнении программы среда CLR активизирует JIT-компилятор, который преобразуетпсевдокод MSIL в собственный код системы по требованию для каждой части программы. Таким образом, программа на C# фактически выполняется как собственныйкод, несмотря на то, что первоначально она скомпилирована в псевдокод MSIL. Этоозначает, что такая программа выполняется так же быстро, как и в том случае, когдаона исходно скомпилирована в собственный код, но в то же время она приобретает всепреимущества переносимости псевдокода MSIL.