|
Главная » 2010 » Февраль » 10 » Знакомство с С#
|
Знакомство с С# Добро пожаловать в первую главу этой книги — "Введение в С#"! Здесь рас- сматриваются основополагающие вопросы, необходимые для начала работы на С#. В первой главе дается общий обзор С# и .NET Framework, рассказывается, что представляют собой эти технологии, какие причины побуждают ими пользовать- ся и каким образом эти технологии соотносятся между собой. Начнем мы с самого общего рассмотрения .NET Framework. Это новая техно- логия, и она включает множество понятий, которые на первый взгляд кажутся хит- роумными (так как .NET Framework использует принципиально новый подход к разработке приложений). Отсюда следует, что при обсуждении этой темы вам за короткий промежуток времени придется столкнуться с большим количеством но- вых понятий. Однако это неизбежно, поскольку знание основ крайне важно для понимания программирования на С#. В последующих главах многие из этих тем будут рассмотрены повторно и более детально. Далее приводится упрощенное описание собственно языка С#; среди прочего будут рассмотрены его корни и черты сходства с C++. Наконец, вы познакомитесь с основным инструментом, который будет исполь- зоваться на протяжении всей книги,— Visual Studio.NET (VS). Что такое .NET Framework .NET Framework — это новая и революционная платформа, созданная компа- нией Microsoft для разработки приложений. Самым интересным в этом утверждении является его неопределенность, однако для этого имеются достаточно веские основания. Для начала обратите внимание на то, что в нем не говорится: "для разработки приложений в операционной среде Windows". И хотя первая версия .NET Framework работает под управлением опера- ционноиГ системы Windows, в дальнейшие планы компании входит создание версий, которые будут работать с другими операционными системами, такими как FreeBSD, Linux, Macintosh, и даже на устройствах, относящихся к классу персональных цифровых устройств (personal digital assistant, PDA). Один из основных мотивов создания данной технологии — то, что она предназначается для объединения раз- нородных операционных систем. Более того, приведенное выше определение .NET Framework не содержит ни- каких ограничений относительно типов приложений, создание которых она поддер- живает. Причина в том, что никаких ограничений не существует: .NET Framework допускает создание Windows-приложений, web-приложений, web-служб и многого- многого другого, что только можно себе представить. Глава 1 Технология .NET Framework разрабатывалась таким образом, чтобы ее можно было использовать из любого языка программирования. Это справедливо и по от- ношению к предмету настоящей книги — С#, а также в отношении C+ + , Visual Basic, JScript и даже более старых языков, таких как COBOL. Для того чтобы до- биться такого результата, пришлось создать специальные версии соответствующих языков: Managed C++ (управляемый C+ + ), Visual Basic.NET, JScript.NET и т.д.— с течением времени появляются все новые и новые. Но все эти языки обладают не только доступом к .NET Framework, но и возможностью взаимодействовать друг с другом. Совершенно нормальной является ситуация, когда разработчики исполь- зуют в С# код, написанный на Visual Basic.NET, и наоборот. Все это обеспечивает немыслимый доселе уровень гибкости и является одной из причин, по которой использование .NET Framework представляется таким перс- пективным. Из чего состоит .NET Framework .NET Framework состоит прежде всего из огромной библиотеки программ, к ко- торой можно обращаться из различных языков программирования (например из С#) с помощью различных технологий объектно-ориентированного программи- рования (ООП, object-oriented programming). Эта библиотека разбита на несколько различных модулей таким образом, что имеется возможность использовать ту или иную ее часть в зависимости от требуемых результатов. Так, например, в одном из модулей содержатся "кирпичики", из которых можно построить Windows-при- ложения, в другом — "кирпичики", необходимые для организации работы в сети, в третьем — все необходимое для развития Всемирной паутины (Web). Некоторые из этих модулей подразделяются на более специфические подмодули: к примеру, в состав модуля для развития Паутины входит подмодуль, предназначенный для со- здания web-служб. Основная идея в данном случае заключается в том, что различные операцион- ные системы могут поддерживать некоторые или все из этих модулей (что зависит от характеристик этих операционных систем). Так, PDA потенциально мог бы под- держивать все основные функциональные возможности .NET, однако маловероят- но, чтобы ему потребовались какие-либо более хитрые модули. Часть библиотеки .NET Framework посвящена описанию некоторых базисных типов. Тип — это способ представления данных; определение наиболее фундамен- тальных из них (например 32-разрядного целого со знаком) облегчает совместное использование языков программирования с помощью .NET Framework. Все вместе это называется Common Type System (CTS — единая система типов). Кроме вышеописанной библиотеки, в состав системы входит также .NET Common Language Runtime (CLR — единая система выполнения программ), которая от- ветственна за поддержку выполнения всех приложений, разработанных с исполь- зованием библиотеки .NET. Как можно создавать приложения с помощью .NET Framework Создание приложений с помощью .NET Framework означает написание програм- мы (на любом из языков программирования, поддерживаемых системой) посред- ством использования библиотеки программ. В этой книге для наших разработок мы будем использовать VS, который представляет собой мощную интегрированную среду разработки, поддерживающую С# (а также управляемый и не управляемый Знакомство с С# C + + , Visual Basic.NET и некоторые другие языки программирования). Преимуще- ством данной среды является та простота, с которой возможности .NET могут быть интегрированы в наши программы. Код, который мы будем создавать, будет целиком написан на С#, однако в нем повсеместно будут использоваться возмож- ности .NET Framework, а там, где возникнет необходимость, мы будем применять в VS дополнительные инструменты. Для того чтобы написанная на С# программа могла быть выполнена, ее необ- ходимо преобразовать в язык, понятный операционной системе, на которой эта программа будет выполняться; такой язык известен под названием родного кода. Подобное преобразование называется компиляцией программы и выполняется компилятором. Однако в .NET этот процесс состоит из двух этапов. MSIL и ЛТ При компиляции кода, в котором используется библиотека .NET Framework, мы не получаем сразу родной код для конкретной операционной системы. На- против, наша программа будет откомпилирована в программу на языке Microsoft Intermediate Language (MSIL — промежуточный язык компании Microsoft). Этот код не является специфическим ни для какой операционной системы и так же точно не является специфическим для. С#. Компиляция с других языков програм- мирования .NET — например с Visual Basic.NET — на первом этапе тоже проис- ходит на этот язык. Данный этап компиляции выполняется VS в тех случаях, когда мы используем его для разработки приложений на С#. Очевидно, что для запуска приложения потребуется сделать некоторую допол- нительную работу. Эта работа возлагается на ЛТ-компилятор (Just-In-Time, свое- временный), который осуществляет компиляцию MSIL-кода на код, специфический для ОС и архитектуры используемого компьютера. Только после этого операцион- ная система может выполнить приложение. В прошлом часто возникала необходимость транслировать написанную про- грамму в несколько различных приложений, каждое из которых предназначалось для конкретной операционной системы и архитектуры центрального процессора. Нередко это был один из способов оптимизации (направленной на то, чтобы про- грамма, к примеру, быстрее выполнялась на AMD-чипах), но иногда это оказыва- лось критичным (например, когда приходилось использовать некоторые приложения одновременно и в среде Win9x, и в среде WinNt/2000). Теперь такая необходи- мость исчезла, поскольку ЛТ-компиляторы (как и предполагает их название) ис- пользуют код на языке MSIL, который совершенно независим от компьютера, операционной системы и центрального процессора. Существует несколько различ- ных ЛТ-компиляторов, каждый из которых предназначается для некоторой конк- ретной архитектуры, поэтому для создания родного кода, необходимого в том или ином случае, будет использоваться соответствующий ЛТ-компилятор. Удобство такого подхода заключается в том, что теперь приходится выполнять существенно меньший объем работы: фактически мы получаем возможность про- сто забыть о системно-зависимых особенностях и сконцентрироваться на более интересных функциональных возможностях создаваемой программы. Модули Когда выполняется компилирование приложения, создаваемый MSIL-код со- храняется в некотором модуле (assembly). В состав таких модулей входят как выполняемые файлы приложений, которые могут быть запущены из Windows Глава 1 напрямую и которым для работы не требуется никаких других программ (такие файлы имеют расширение .ехе), так и библиотеки, предназначенные для исполь- зования другими приложениями (они имеют расширение .dii). Кроме данных на языке MSIL, в модулях хранятся метаинформация (т. е. ин- формация об информации, хранящейся в данном модуле, иначе известная под названием метаданных) и дополнительные ресурсы (дополнительные данные, ис- пользуемые MSIL, например звуковые и графические файлы). Метаинформация делает модули полностью самоописательными. Для использования модуля не тре- буется никакой дополнительной информации; другими словами, исключается ситуа- ция, когда не удается добавить необходимые данные в системный регистр, и все подобные ей, что составляло серьезную проблему при разработке приложений на других платформах. Отсюда следует, что установка приложений зачастую сводится к простому ко- пированию файлов в директорию удаленного компьютера. Поскольку системам, под управлением которых будет выполняться приложение, не требуется никакой дополнительной информации, мы получаем возможность просто запускать выпол- няемый файл из этой директории (при условии, что на данном компьютере инстал- лирована CLR.NET) без каких-либо дополнительных действий. Естественно, размещать все необходимое для выполнения приложения в одном месте не обязательно. Существует возможность создавать код, выполняющий за- дачи, которые могут потребоваться нескольким приложениям. В подобных ситуа- циях полезно располагать такой многократно используемый код в месте, доступном всем приложениям. В .NET Framework таким местом является Global Assembly Cache (GAC — кэш глобальных модулей). Разместить код в таком кэше очень просто: для этого необходимо просто поместить модуль, содержащий соответству- ющую программу, в директорию, содержащую этот кэш. Управляемый код Использование CLR не ограничивается тем моментом, когда мы откомпилиро- вали программу на MSIL, а некоторый ЛТ-компилятор откомпилировал MSIL в родной код. Код, написанный с помощью .NET Framework, является управляемым на этапе выполнения (данный этап зачастую называется временем выполнения (runtime)). Это означает, что CLR отслеживает выполнение приложений, управляя памятью, межъязыковой отладкой, обеспечением безопасности и т. п. Напротив, приложения, которые выполняются не под контролем CLR, называются неуправ- ляемыми, и в них можно использовать определенные языки программирования, такие как C++, для получения, например доступа к функциям нижнего уровня операционной системы. Однако на С# можно писать только код, который выпол- няется в управляемой среде. Мы будем использовать возможности CLR по управ- лению кодом и возложим осуществление любых взаимодействий с операционной системой на .NET. Сборка мусора Одной из наиболее важных особенностей управляемого кода является понятие "сборка мусора". Это способ, применяемый в .NET и гарантирующий полное освобождение памяти, использовавшейся приложением, по завершении работы этого приложения. До появления .NET эта задача возлагалась на программистов, и наличие в программе пары простых ошибок могло привести к ситуации, когда огромные блоки памяти таинственным образом исчезали. Обычно это приводило к постепенному замедлению работы компьютера с последующим крахом системы. Знакомство с С# Код приложения наС# Сборка мусора в .NET работает путем как можно более частого инспектирова- ния памяти компьютера и удаления из нее всего, что уже не требуется. Здесь не существует никаких заранее определенных временных рамок; этот процесс может запускаться с частотой несколько тысяч раз в секунду или один раз в несколько секунд, но вы можете быть уверены, что рано или поздно это случиться. В связи с этим программисты должны учитывать несколько важных аспектов. Поскольку подобные действия выполняются в заранее не известные моменты, при- ложения нужно разрабатывать с учетом этой особенности. Код, который использует большое количество памяти, должен сам очищать память, а не полагаться на авто- матическую сборку мусора, тем более что реализовать это не так уж сложно. Последовательность действий Прежде чем двигаться дальше, давайте сведем воедино все обсуж- давшиеся шаги, необходимые для создания .NET-приложения: Код на С# 1. Код приложения записывается на языке программирования, совместимом с .NET, например на С# (см. рис. справа). 2. Полученная программа компилируется на язык MSIL и помещается в модуль (см. рис. слева). 3. Прежде чем этот код начнет выполняться (сам по себе, если он является выполняемым, или при вызове из другой программы), он должен быть откомпилирован в родной код с помощью ЛТ-компилятора (см. рис. справа). Система выполнения программ .NET CLR Родной код Родной код 1 Родной код I Модуль 4. Родной код выполняется в контексте управляемого CLR совместно с другими приложениями или процессами (см. рис. слева). Связывание Существует еще один момент, который необходимо учитывать в вышеприве- денном процессе. Код на С#, который компилируется на MSIL на шаге 2, совсем не обязательно должен находиться в одном файле. Имеется возможность разнести код приложения по нескольким исходным файлам, которые затем будут скомпили- рованы в единый модуль. Этот процесс известен под названием "связывание" и является чрезвычайно полезным. Причина такого положения дел заключается в том, что работать с несколькими не очень большими файлами намного легче, чем с одним огромным. Можно выделить логически связанный код в отдельный файл, работа над которым будет вестись совершенно независимо и о котором можно за- быть после того, как произойдет компиляция. Такой подход существенно упрощает выявление конкретных сегментов кода, когда они оказываются нужными, а заодно позволяет командам разработчиков разделить бремя программирования на отдель- ные куски, которые затем можно выверять без риска повредить правильно работа- ющие сегменты и те части кода, над которыми трудятся другие программисты.
|
Категория: информатика |
Просмотров: 1353 |
Добавил: basic
| Рейтинг: 0.0/0 |
|
Статистика
Онлайн всего: 1 Гостей: 1 Пользователей: 0
|