Из чего состоит.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, который представляет собой мощную интегрированную среду разработки, поддерживающую С# (а также управляемый и не управляемый
С+ +, 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, который совершенно независим от компьютера, операционной системы н центрального процессора. Существует несколько различных JIT-компиляторов, каждый нз которых предназначается для некоторой конкретной архитектуры, поэтому для создания родного кода, необходимого в том или ином случае, будет использоваться соответствующий ЛТ-компилятор.
|
Удобство такого подхода заключается в том, что теперь приходится выполнять существенно меньший объем работы: фактически мы получаем возможность просто забыть о системно-зависимых особенностях и сконцентрироваться на более интересных функциональных возможностях создаваемой программы.
Модули
Когда выполняется компилирование приложения, создаваемый MSIL-код сохраняется в некотором модуле (assembly). В состав таких модулей входят как выполняемые файлы приложений, которые могут быть запущены из Windows напрямую и которым для работы не требуется никаких других программ (такие файлы имеют расширение.ехе), так и библиотеки, предназначенные для использования другими приложениями (они имеют расширение.dil).
Кроме данных на языке MSIL, в модулях хранятся метаннформацня (т. е. информация об информации, хранящейся в данном модуле, иначе известная под названием метаданных) и дополнительные ресурсы (дополнительные данные, используемые MSIL, например звуковые и графические файлы). Метаинформация делает модули полностью самоописательными. Для использования модуля не требуется никакой дополнительной информации; другими словами, исключается ситуация, когда не удается добавить необходимые данные в системный регистр, и все подобные ей, что составляло серьезную проблему прн разработке приложений на других платформах.
Отсюда следует, что установка приложений зачастую сводится к простому копированию файлов в директорию удаленного компьютера. Поскольку системам, под управлением которых будет выполняться приложение, не требуется никакой дополнительной информации, мы получаем возможность просто запускать выполняемый файл из этой директории (при условии, что на данном компьютере инсталлирована CLR.NET) без каких-либо дополнительных действий,
Естественно, размещать все необходимое для выполнения приложения в одном месте не обязательно. Существует возможность создавать код, выполняющий задачи, которые могут потребоваться нескольким приложениям. В подобных ситуациях полезно располагать такой многократно используемый код в месте, доступном всем приложениям. В.NET Framework таким местом является Global Assembly Cache (GAC — кэш глобальных модулей). Разместить код в таком кэше очень просто: для этого необходимо просто поместить модуль, содержащий соответствующую программу, в директорию, содержащую этот кэш.
Управляемый код
Использование CLR не ограничивается тем моментом, когда мы откомпилировали программу на MSIL, а некоторый ЛТ-компнлятор откомпилировал MSIL в родной код. Код, написанный с помощью.NET Framework, является управляемым на этапе выполнения (данный этап зачастую называется временем выполнения (runtime)). Это означает, что CLR отслеживает выполнение приложений, управляя памятью, межъязыковой отладкой, обеспечением безопасности и т. п.
Напротив, приложения, которые выполняются не под контролем CLR, называются неуправляемыми, и в них можно использовать определенные языки программирования, такие как С + +, для получения, например доступа к функциям нижнего уровня операционной системы. Однако на С# можно писать только код, который выполняется в управляемой среде. Мы будем использовать возможности CLR по управлению кодом и возложим осуществление любых взаимодействий с операционной системой на.NET.
Сборка мусора
Одной нз наиболее важных особенностей управляемого кода является понятие "сборка мусора". Это способ, применяемый в.NET и гарантирующий полное освобождение памяти, использовавшейся приложением, по завершении работы этого приложения. До появления.NET эта задача возлагалась на программистов, и наличие в программе пары простых ошибок могло привести к ситуации, когда огромные блоки памяти таинственным образом исчезали. Обычно это приводило к постепенному замедлению работы компьютера с последующим крахом системы,
Сборка мусора в.NET работает путем как можно более частого инспектирования памяти компьютера и удаления из нее всего, что уже не требуется. Здесь не существует никаких заранее определенных временных рамок; этот процесс может запускаться с частотой несколько тысяч раз в секунду или один раз в несколько секунд, но вы можете быть уверены, что рано нлн поздно это случиться.
В связи с этим программисты должны учитывать несколько важных аспектов. Поскольку подобные действия выполняются в заранее не известные моменты, приложения нужно разрабатывать с учетом этой особенности. Код, который использует большое количество памяти, должен сам очищать память, а не полагаться на автоматическую сборку мусора, тем более что реализовать это не так уж сложно.
Связывание
Существует еще одни момент, который необходимо учитывать в вышеприведенном процессе. Код на С#, который компилируется иа MSIL на шаге 2, совсем не обязательно должен находиться в одном файле. Имеется возможность разнести код приложения по нескольким исходным файлам, которые затем будут скомпилированы в единый модуль. Этот процесс известен под названием "связывание" н является чрезвычайно полезным. Причина такого положения дел заключается в том, что работать с несколькими не очень большими файлами намного легче, чем с одним огромным. Можно выделить логически связанный код в отдельный файл, работа иад которым будет вестись совершенно независимо и о котором можно забыть после того, как произойдет компиляция. Такой подход существенно упрощает выявление конкретных сегментов кода, когда они оказываются нужными, а заодно позволяет командам разработчиков разделить бремя программирования на отдельные куски, которые затем можно выверять без риска повредить правильно работающие сегменты и те части кода, иад которыми трудятся другие программисты.
Что такое С#
Как отмечалось выше, С# — один нз языков программирования, который может использоваться для создания приложений, выполняемых в среде.NET CLR. Этот язык — результат эволюции языков С и C#, созданный компанией Microsoft специально для использования на платформе.NET, Являясь новейшей разработкой, С# конструировался очень тщательно, с учетом наилучших возможностей других языков, предназначенных для решения специфических проблем.
Создавать приложения на С# легче, чем на C#, поскольку синтаксис языка С# более простой, чем синтаксис C#. Тем не менее С# является мощным языком программирования, и имеется мало вещей, которые можно сослать на C# и нельзя на С#. Однако необходимо помнить, что возможности С#, соответствующие наиболее продвинутым возможностям C# (например непосредственный доступ и внесение изменений в системную память), могут быть осуществлены только с помощью кода, помеченного как unsafe (небезопасный). Эти продвинутые способы программирования, как следует уже нз их названия, представляют потенциальную опасность, поскольку они позволяют записывать информацию в критические системные участки памяти с потенциально катастрофическими результатами. Именно по этой причине, а также нз некоторых других соображений мы не будем рассматривать данную тему в этой книге.
Иногда код на С# оказывается более объемным, чем на C#. Это следствие того, что в С# (в отличие от С+ +) осуществляется контроль безопасности использования типов. С точки зрения непрофессионала это означает, что если некоторые данные отнесены к определенному типу, то впоследствии они не могут самостоятельно преобразовываться в другие типы, Поэтому, существуют строгие правила, которым необходимо следовать при выполнении преобразования из одного типа в другой. Это часто приводит к необходимости писать на С# больший объем кода, чем на C#. Однако взамен мы получаем то преимущество, что программа становится более надежной и ее отладка упрощается, поскольку.NET постоянно следит за тем, к какому типу относится данная переменная в каждый конкретный момент времени, К примеру, в С# мы не можем дать задание: "Возьми 4 банта памяти из этих данных и 10 байтов нз других данных и рассматривай эту область памяти как X", но это не обязательно является недостатком.
С# является всего лишь одним из языков, позволяющих работать в.NET, но на взгляд автора он безусловно лучший. Его главное преимущество заключается в том, что С# — единственный язык, разработанный для.NET Framework "с нуля", н он может использоваться в качестве основного языка для различных версий.NET, которые предназначаются для переноса на другие операционные системы. Для того чтобы некоторые языки — вроде VB.NET — в максимальной степени соответствовали своим предшественникам и прн этом могли работать с CLR, приходится отказываться от поддержки отдельных возможностей библиотеки программ.NET. Напротив, С# позволяет использовать любые возможности, предоставляемые библиотекой программ.NET Framework,
Какие типы приложений могут создаваться на С#
Как уже говорилось,.NET Framework не налагает никаких ограничений на возможные типы создаваемых приложений. С# использует эту систему и также не имеет никаких ограничений, касающихся типов приложений. Тем не менее давайте рассмотрим некоторые наиболее часто встречающиеся типы приложений:
□ Приложения Windows. Это приложения вроде Microsoft Office, имеющие знакомый "Windows-подобный" вид и представление. Создавать такие приложения достаточно просто с помощью модуля.NET Framework, который называется Windows Forms и представляет собой библиотеку управляющих элементов (кнопок, панелей инструментов, меню и т. п.); эта библиотека может использоваться для создания пользовательского интерфейса (user interface, UI) Windows.
□ Web-приложения. Эти приложения представляют собой web-страницы, которые могут просматриваться любым web-браузером. В состав.NET Framework входит мощная система динамического создания содержимого web-страниц, позволяющая идентифицировать пользователя, обеспечивать безопасность и пр. Эта система называется Active Server Pages.NET (ASP.NET — активные серверные страницы.NET); для создания приложений ASP.NET можно применять Web Forms языка С#,
□ Web-службы. Это новый замечательный способ создания гибких распределенных приложений. С помощью web-служб можно обмениваться по Интернету практически любыми данными с использованием единого простого синтаксиса независимо от того, какой язык программирования применялся при создании web-службы и на какой системы она размещена.
Приложениям всех перечисленных типов может потребоваться доступ к базам данных, что осуществляется с помощью раздела,NET Framework, называемого Active Data Objects.NET (ADO.NET — активные объекты с данными.NET). Также можно использовать и многие другие ресурсы, например, инструменты для создания сетевых компонентов, графического вывода, выполнения сложных математических вычислений и т. д.
С# в этой книге
Второй и третий разделы данной книги посвящены синтаксису и использованию С#, при этом онн практически обходят вниманием -NET Framework. Это совершенно необходимо, поскольку без твердых навыков программирования на С# невозможно использовать.NET Framework. Фактически мы начнем с самых азов, а рассмотрение наиболее сложной темы — объектно-ориентированного программирования (ООП, Object Oriented Programming) — отложим до того момента, когда будут изучены основы. Материал будет излагаться начиная с самых простых принципов, исходя нз предположения, что у читателя отсутствуют какие-либо знания по программированию.
После этого мы окажемся готовы к созданию приложений тех типов, которые перечислены выше. В четвертом разделе настоящей книги будет описано программирование с использованием Windows Forms; в пятом разделе рассматриваются другие связанные с.NET темы (например доступ к базам данных); в шестом разделе вы познакомитесь с созданием web-приложений и web-служб. В заключение будут даны более сложные практические примеры, где будет применена информация из предшествующих разделов.
Пишите программы на C# в простом и четком стиле.
Теперь, когда мы выяснили, что из себя представляет С# и каким образом он вписывается в.NET Framework, настало время заняться грязной работой и написать конкретную программу. На протяжении всей книги мы будем использовать Visual Studio.NET (VS), поэтому первое, что необходимо сделать,— это получить некоторое представление о данной среде разработки. VS является очень большим и очень сложным продуктом, способным навести ужас на тех, кто встречается с ним впервые; однако использовать его для создания несложных приложений на удивление просто. Когда в данной главе мы начнем с ним работать, вы увидите, что немного "поиграть" с программами на С# можно и не обладая большими знаниями. В дальнейшем вам встретятся более сложные операции, которые может выполнять VS, однако на данный момент все, что нам потребуется,— это базовые знания о его возможностях.
Познакомившись с VS, мы создадим два простых приложения. При этом для нас будет важно не столько их программное наполнение, сколько то, что они работают правильно и что мы прошли через все процедуры создания приложений.
Первое приложение, которое мы собираемся создать, будет простым консольным приложением. Консольными называются такие приложения, в которых не используется многооконная графическая среда; поэтому нам не придется беспокоиться о кнопках, меню, организации взаимодействия с указателем мыши и тому подобных вещах. Это приложение будет запускаться нз окна командной строки, и взаимодействие с ним будет организовано весьма простым способом.
Вторым будет приложение Windows Forms. Его внешний вид и работа с ним окажутся очень знакомыми для пользователей Windows, а усилий на его создание потребуется {что удивительно) не так уж много. При этом синтаксис необходимого кода окажется более сложным, хотя во многих случаях нам не придется беспокоиться о деталях.
Приложения обоих типов будут использоваться нами на протяжении следующих двух разделов, причем вначале консольному приложению будет уделяться несколько больше внимания. Дополнительная гибкость окопных приложений не является принципиально важной нри изучении языка С#, в то время как простота консольных приложений позволит нам сосредоточиться на изучении синтаксиса и не беспокоиться о внешнем виде приложения.
При первой загрузке VS на монитор выводится множество окоп, большинство нз которых пусты, а также ряд пунктов меню и иконок, которыми нам предстоит пользоваться, но не волнуйтесь заранее: очень скоро они станут более попятными,
Рис. 2. Visual Studio 2008 (выпущена 19 ноября 2007 г, с 28 октября 2008 г впервые доступна версия на русском языке)
Основное окно, в котором при запуске VS появляется "начальная страница", в дальнейшем будет содержать весь наш код. Оно поделено на части так, чтобы можно было легко перемещаться между файлами, щелкая мышью по имени соответствующего файла. У этого окна имеются и другие функции: в нем могут выводиться графические пользовательские интерфейсы, разрабатываемые для наших проектов, файлы с обычным текстом, HTML, а также различные встроенные в VS инструменты. Все эти функции будут описываться по ходу изложения материала.
Выше основного окна располагаются панели инструментов и меню VS. Здесь могут находиться панели инструментов с са'мыми разнообразными функциональными возможностями: сохранение и загрузка файлов, создание и запуск проектов, отладка управляющих элементов и т. д. Повторим еще раз, что все эти возможности будут обсуждаться по мере возникновения необходимости в них.
Ниже приводится краткое описание основных возможностей VS, пользоваться которыми приходится наиболее часто:
□ Панель Server Explorer и панель Toolbox (инструменты) появляются при движении по ним указателя мыши, открывая различные дополнительные возможности, например, доступ к установкам сервера и службам, а также к элементам построения пользовательских интерфейсов для оконных приложений.
В окне Solution Explorer выводится информация о решении, загруженном в настоящий момент. "Решение" в терминологии Visual Studio обозначает один или несколько проектов вместе с их настройками. Здесь мы можем увидеть различные представления проектов, участвующих в решении: например, из каких файлов они состоят и что в этих файлах содержится.
Окно Properties (свойства) позволяет получить более детальное представление о содержимом проекта; в нем предусмотрена возможность дополнительной настройки отдельных элементов. К примеру* здесь можно изменить внешний вид кнопки приложения Windows.
Окно Task List/Output (список заданий/вывод) содержит информацию, относящуюся к компиляции проектов, а также задачи, которые требуют завершения (они представлены наподобие списка заданий в Microsoft Outlook). Эти задачи могут вводиться вручную, а могут генерироваться VS автоматически.
Может показаться, что-объем новой информации слишком велик, однако не беспокойтесь: пройдет немного времени, и вы привыкнете к Visual Studio. Итак, давайте приступим к созданию самого первого опытного проекта, который предполагает использование многих элементов VS из числа описанных выше.
MONO
Он предоставлял разработчику практически все те возможности, которые доступны Microsoft Visual Studio.NET.
Как построен курс учебника
Схема 1. Структура выполнения работ
Часть 2 Среда программирования на C#
Обычно системы программирования на C# состоят из нескольких частей: среда программирования, язык, стандартная библиотека С и различные библиотеки классов. Рассмотрим типичную среду разработки программ на C#, показанную на рис. 1.1.
Как правило, для того, чтобы выполнить программу на C#, надо пройти шесть этапов (рис. 1.1): редактирование, предварительную (препроцессорную) обработку, компиляцию, компоновку, загрузку и выполнение. Мы остановимся на системе C#, ориентированной на UNIX. Если вы не пользуетесь системой UNIX, обратитесь к справочникам для вашей системы или спросите вашего инструктора, как приспособить эти задачи к вашей операционной среде.
Первый этап представляет собой редактирование файла. Он выполняется с помощью редактора программ. Программист набирает с помощью этого редактора свою программу на C# и, если это необходимо, вносит в нее исправления.
Программа запоминается на вспомогательном запоминающем устройстве, например, на диске. Имена файлов программ на C# часто оканчиваются расширением.С (заметим, что С — прописная буква; некоторые операционные среды C# требуют других расширений, таких как.срр или.схх; для получения более детальной информации смотрите документацию по вашей операционной среде C#). В системе UNIX широко используются два редактора — vi и emacs. Некоторые пакеты C#, такие как Borland C# и Microsoft C/C++, имеют встроенные редакторы, которые органично объединены с операционной средой программирования. Мы предполагаем, что читатель знает, как редактировать программу.
На следующем этапе программист дает команду компилировать программу. Компилятор переводит программу в машинный код (называемый также объектным кодом). В системе C# перед началом этапа трансляции выполняется программа предварительной обработки. Эта программа в C# подчиняется специальным командам, называемым директивами препроцессора, которые указывают, что в программе перед ее компиляцией нужно выполнить определенные преобразования. Обычно эти преобразования состоят во включении других текстовых файлов в файл, подлежащий компиляции, и выполнении различных текстовых замен. Наиболее общие директивы препро- цессора обсуждаются в начальных главах; детальное обсуждение всех особенностей препроцессорной обработки дано в приложениях. Препроцессорная обработка инициируется компилятором перед тем, как программа преобразовывается в машинный код.
Следующий этап называется компоновка. Программы на C# обычно содержат ссылки на функции, определенные где-либо вне самой программы, например, в стандартных библиотеках или в личных библиотеках групп программистов, работающих над данным проектом. Объектный код, созданный компилятором, обычно содержит «дыры» из-за этих отсутствующих частей. Компоновщик связывает объектный код с кодами отсутствующих функций, чтобы создать исполняемый загрузочный модуль (без пропущенных частей). В типичной, основанной на UNIX, системе команда компиляции и компоновки программы на C# обозначается как СС. Чтобы скомпилировать и скомпоновать программу по имени welcom.C, наберите по приглашению UNIX
СС welcom.C и нажмите клавишу return (возврат каретки). Если программа скомпилирова-лась и скомпоновалась правильно, будет создан файл a.out. Это и есть исполняемый загрузочный модуль нашей программы welcome.С. Следующий этап называется загрузка. Перед выполнением программа должна быть размещена в памяти. Это делается с помощью загрузчика, который забирает исполняемый загрузочный модуль с диска и перемещает его в память.
Затем компьютер под управлением своего ЦПУ выполняет поочередно в каждый момент времени по одной команде программы. Чтобы загрузить и выполнить программу в системе UNIX, мы набираем по приглашению UNIX команду a.out и нажимаем клавишу return.
Программа редко работает с первой попытки. Каждый из описанных этапов может окончиться неудачей из-за разного типа ошибок, которые мы обсудим в этой книге. Например, исполняемая программа может пытаться разделить на нуль (операция, не разрешенная в компьютерах так же, как и в арифметике). Это приведет к печати компьютером сообщения об ошибке. Программист должен вернуться к этапу редактирования, внести необходимые исправления и снова провести программу через остальные этапы, чтобы убедиться в правильности сделанных исправлений.
СХЕМА Введение в программирование на C#
Язык C# облегчает структурированный и упорядоченный подход к проектированию компьютерных программ. Теперь мы познакомимся с программированием на C# и представим несколько примеров, иллюстрирующих многие важные свойства C#. Каждый пример посвящен одному оператору. В главе 2 мы детально рассмотрим структурное программирование на C#. Затем мы используем структурный подход при изложении материала главы 5. Начиная с шестой главы, мы изучим объектно-ориентированное программирование на C#. Из-за особой важности объектно-ориентированного программирования в этой книге каждая из первых пяти глав заканчивается разделом, озаглавленным «Размышления об объектах». Эти специальные разделы знакомят с основными идеями объектного подхода.
Простая программа: печать строки текста
В С# используются формы записи, которые непрограммисту могут показаться странными. Мы начинаем с рассмотрения простой программы, печатающей строку текста. Программа и результаты ее работы на экране показаны код. 1.2.
Код программы:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
//Первая компьютерная модель выводящая текст
Console.WriteLine("Привет технолог, это первая компьютерная модель на С#");
}
}
}
Результат выполнения:
Привет технолог, это первая компьютерная модель на С# Для продолжения нажмите любую клавишу…
Код. 2.1. Первая компьютерная модель программы выводящая текст
При набирания кода, в окне Error List / Список ошибок рис. 2.1. помогает исправлять ошибки в коде, поскольку в нем выводятся сообщения о том, что необходимо сделать для успешной компиляции проекта. Если два раза щелкнуть мышью на ошибке, указанной в данном окне, то курсор переместится на ту позицию в строке исходного кода, где ошибка содержится (если файл с исходным текстом не был открыт ранее, он откроется в этот момент); это позволяет быстро исправлять промахи. В местах, где обнаружены ошибки, также можно увидеть волнистые линии красного цвета, благодаря чему можно быстро просматривать исходный код для выявления ошибок.
Рис. 2.1 Окно Error List / Список ошибок
Обратите внимание на то, что местонахождение ошибки указывается в виде номера строки. В текстовом редакторе VS номера строк по умолчанию не выводятся, однако такой режим вполне достоин того, чтобы в него перейти. Для этого потребуется установить соответствующий флажок в диалоговом окне Options / Опции (Параметры), в которое можно перейти через пункт меню Tools / Сервис | Options / Опции (Параметры) рис. 2.2.
Рис. 2.2 Окно параметров для вывода номера строк
Итоги: В данной главе вы познакомились с некоторыми инструментами, которые будут использоваться в остальной части книги. Мы в общих чертах — рассмотрели среду разработки Visual Studio.NET и использовали ее для создания двух типов приложений. Более простое из них консольное приложение; его вполне достаточно для решения большинства наших задач, и оно позволяет нам сосредоточиться на основах программирования на С#. Оконные приложения несколько сложнее, однако визуально они оказываются более впечатляющими н наглядными для пользователей, знакомых с оконной средой (т. е. почти для всех). Теперь, когда вы научились создавать простые приложения, можно перейти к настоящему изучению С#. Следующая глава посвящена основам синтаксиса С# и структуре программ на С#, которые необходимо освоить, прежде чем переходить к более сложным объектно-ориентированным методам. А изучив их, мы сможем перейти к вопросу об использовании С# для получения доступа к тем большим возможностям, которые предоставляет.NET Framework. Базовый синтаксис
2.1 Структура кода в моделирование
Код на С# представляет собой последовательность операторов, каждый из которых оканчивается точкой с запятой. С# — язык, обладающий блочной структурой; другими словами, каждый оператор является частью некоторого блока кода. Эти блоки, для обозначения начала и конца которых используются фигурные скобки { и }, могут содержать произвольное количество операторов или не содержать их вовсе. Обратите внимание, что фигурные скобки не сопровождаются точками с запятой. Итак, простой блок программы на С# может иметь следующий вид:
{
Строка кода 1, оператор 1;
…
Строка кода х, оператор y;
}
В этом простом примере кода использованы отступы, чтобы сделать запись на С# более наглядной.
Блоки могут быть вложены друг в друга (т. е. блоки могут содержать в себе другие блоки), и в таком случае величина отступа у вложенных блоков должна быть больше:
{
Строка кода 1, оператор 1;
{
Строка кода 2, оператор 2;
Строка кода 3, оператор 3;
}
Строка кода 4, оператор 4;
}
В коде на С# необходимо использовать комментарии. Для того чтобы обозначить комментарии по первому способу, используют сочетания символов /* в начале комментария, и */ в конце комментария. Другой подход к оформлению комментария состоит в использовании в качестве его начала символов //.
/* Длинный комментарии */
// Короткие комментарии
Переменные
Переменные тесно связаны с хранением данных. По существу, переменные в памяти компьютера можно представить в виде коробочек, лежащих на полке. Такие коробочки могут использоваться для того, чтобы что-нибудь в них класть, а затем вынимать обратно, или же можно просто заглянуть в них и узнать, есть там что-то или нет. Все это относится и к переменным, в которые мы можем помещать данные, а затем брать их оттуда или просматривать по мере необходимости.
Эти коробочки можно представить различных размеров и форм, причем разные объекты могут помещаться только в специально предназначенные для них коробочки.
Для того чтобы использовать коробочку (переменную) её необходимо объявить. Это означает, что ей должны быть присвоены имя и тип. Как только переменная объявлена, она может использоваться как хранилище для данных того типа, который указан в ее объявлении.
Объявления переменных:
{
тип переменной, её имя;
}
В табл. 2.1 приводятся некоторые имена типов и указывается, какому типу в библиотеке.NET Framework они соответствуют.
Таблица 2.1 Имена некоторых типов переменных
Тип | Тип.NET Framework | Допустимые значения |
sbусе | System.SByte | Целое в диапазоне от -128 до 127 |
byte | System.Byte | Целое в диапазоне от 0 до 255 |
short | System.Int16 | Целое в диапазоне от -32 768 до 32 767 |
uahort | System.UInt16 | Целое в диапазоне от 0 до 65 535 |
int | System.Int32 | Целое в диапазоне от -2 147 483 648 до 2 147 483 647 |
uint | System.UInt32 | Целое в диапазоне от 0 до 4 294 967 295 |
Буква "u", встречающаяся перед некоторыми из имен, является сокращением от слова "unsigned" ("без знака"). Это говорит о том, что в переменных соответствующего типа не могут храниться отрицательные значения.
Естественно, что кроме целых чисел нам требуется хранить значения с плавающей запятой, которые представляют нецелые числа табл. 2.2.
Таблица 2.2 Имена некоторых типов переменных с плавающей запятой
Тип | Тип.NET Framework | Допустимые значения |
float | System.Single | от 1,5х10-45 до 3,4х1038 |
double | System.Double | от 5,0х10-324 до 1,7х10308 |
Кроме численных типов, существует еще простые типы переменных табл. 2.3.
Таблица 2.2 Имена простых типов переменных
Тип | Тип.NET Framework | Допустимые значения |
string | System.String | Последовательность символов |
bool | System.Boolean | Логическое значение (Boolean), которое может принимать значения true (истина) или false (ложь) |
Логический тип bool — один из наиболее часто используемых в С# типов переменной; аналогичные типы часто встречаются в кодах на других языках программирования. Использование переменной, которая может принимать только два значения — либо true, либо false,— создает очень важную возможность ветвления логики приложения. В качестве простого примера представьте себе, какое огромное количество вопросов допускают d качестве ответа true или false ("да" или "нет"). Сравнение значений переменных и проверка допустимости введенной информации как раз представляют собой примеры программного использования логических переменных (эти примеры вскоре станут предметом нашего изучения). Пример использования переменных:
Имена переменные. В качестве имени переменной можно использовать произвольную последовательность символов.
Основные правила при именовании переменных следующие:
· Первый символ в имени переменной должен быть либо буквой, либо символом подчеркивания _;
· Последующими символами могут быть буквы, символ подчеркивания или цифры.
Кроме того, существуют определенные ключевые слова, которые обладают особым смыслом с точки зрения компилятора С#, например, waste или raw, Если по ошибке используется одно из них, компилятор выразит свое недовольство.
Следующие имена переменных являются правильными:
myRawGOST
GOST1
_waste