ebook img

Программирование на языке C# PDF

80 Pages·0.506 MB·Russian
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Программирование на языке C#

Министерство образования и науки Российской Федерации Федеральное агентство по образованию Южно-Уральский государственный университет Кафедра «Цифровые радиотехнические системы» 681.3.06(07) П804 И.И. Прокопов ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ C# Учебное пособие Челябинск Издательство ЮУрГУ 2008 УДК [681.3.06:519.6](076.5) П804 Одобрено учебно-методической комиссией приборостроительного факультета Рецензенты: О.А. Алексеева, В.М. Рукавишников Прокопов, И.И. П804 Программирование на языке C#: учебное пособие / И.И. Прокопов. – Челябинск: Изд-во ЮУрГУ, 2008. – 80 с. Настоящее учебное пособие составлено для оказания помощи студентам при освоении разделов дисциплины «Информатика», связанных с изучением языков программирования. В учебном пособии рассмотрены общие вопросы, связанные с разработкой программ, основные синтаксические конструкции языка C#, стандартные и пользовательские типы данных, состав библиотек, правила работы в среде разработки Microsoft Visual Studio. Учебное пособие предназначено для студентов 1-го курса очного обучения приборостроительного факультета специальностей «Радиотехника» и «Средст- ва связи с подвижными объектами» и направлений «Радиотехника» и «Теле- коммуникации». УДК [681.3.06:519.6](076.5) © Издательство ЮУрГУ, 2008 2 ВВЕДЕНИЕ Для разработки приложений на языке C# используется Microsoft Visual Studio.NET – интегрированная среда разработки (Integrated Development Environment (IDE)) для создания, документирования, запуска и отладки программ, написанных на языках .NET. Microsoft Visual Studio.NET – это мощный инструмент профессиональ- ной разработки сложных приложений фирмы Microsoft, предназначенное для созда- ния приложений, работающих на платформе .NET. Мicrosoft .NET – это платформа и набор технологий, в которой предполагается использование около 30 языков про- граммирования, которые обращаются к единой иерархии классов, обеспечивающих базовые сервисы. В частности, в состав Visual Studoo .NET входят следующие языки: • Visual С ++.Net. • Visual C# .Net. • J# .Net. • Visual Basic.Net. Некоторые возможности для языка C#, реализованные в Microsoft Visual Studio.NET: • Автоматическая сборка мусора (garbage collection). • Механизм отражения (Reflection) для описания информации о типах. • Компиляция исходного кода в промежуточный байт-код. • JIT-компиляция байт-кода в собственно код. • Исполнение кода в специальной защищенной среде. • Все должно лежать в классе – никаких глобальных функций и данных. • Отсутствие множественного наследования, хотя реализация нескольких ин- терфейсов и возможна. • Дерево объектов с единым корнем. • Специальные операторы для защиты кода и данных. • Использование исключений для обработки ошибок. • Ключевые слова package/namespace для предотвращения конфликтов типов. • Соглашение о применении комментариев внутри кода в качестве докумен- тации. • Проверка границ массивов. • Встроенные библиотеки для работы с GUI, сетями, потоками и т.п. • Отсутствие неинициализированных переменных. Если программист не ини- циализировал переменную, она автоматически инициализируется компилятором. • По умолчанию использование указателей запрещено. • Использование package/namespace для ссылок на внешние библиотеки и компоненты вместо использования заголовочных файлов. • Использование точки вместо операторов С++ <->> и <::>. • Ужесточение контроля типов. Так, в операторах if нельзя использовать це- лочисленные значения без явного приведения их к типам boolean/bool. 3 Все языки, включаемые в среду разработки Visual Studio .Net, должны исполь- зовать единый каркас – Framework .Net. В каркасе Framework .Net можно выде- лить два основных компонента: • статический – FCL (Framework Class Library) – библиотеку классов каркаса; • динамический – CLR (Common Language Runtime) – общеязыковую испол- нительную среду. Каркас является единым для всех языков среды. Поэтому, на каком бы языке программирования не велась разработка, она использует классы одной и той же библиотеки. Многие классы библиотеки, составляющие общее ядро, используют- ся всеми языками. Отсюда единство интерфейса приложения, на каком бы языке оно не разрабатывалось, единство работы с коллекциями и другими контейнерами данных, единство связывания с различными хранилищами данных и прочая уни- версальность. Компиляторы языков программирования, включенные в Visual Studio .Net, создают модули на промежуточном языке MSIL (Microsoft Intermediate Language), который иногда называют также просто – IL. Компиляторы создают так называе- мый управляемый модуль – переносимый исполняемый файл (Portable Executable или PE-файл). Этот файл содержит код на IL и метаданные – всю необходимую информацию как для CLR, так и конечных пользователей, работающих с прило- жением. В зависимости от выбранного типа проекта, PE-файл может иметь уточ- нения exe, dll, mod или mdl. PE-файл, имеющий уточнение exe, хотя и является exe-файлом, но это не со- всем обычный, исполняемый Windows, файл. При его запуске он распознается как специальный PE-файл и передается CLR для обработки. Исполнительная среда начинает работать с кодом, в котором специфика исходного языка программиро- вания исчезла. Код на IL начинает выполняться под управлением CLR, поэтому код называется управляемым. Исполнительную среду можно рассматривать как своеобразную виртуальную IL-машину. Эта машина транслирует "на лету" тре- буемые для исполнения участки кода в команды реального процессора, который в действительности и выполняет код. Среда .NET Framework Оболочка .NET Framework определяет среду для разработки и выполнения сильно распределенных приложений, основанных на использовании компонент- ных объектов. Она позволяет "мирно сосуществовать" различным языкам про- граммирования и обеспечивает безопасность, переносимость программ и общую модель программирования для платформы Windows. Важно при этом понимать, что .NET Framework no своему существу не ограничена применением в Windows, т.е. программы, написанные для нее, можно затем переносить в среды, отличные от Windows. Связь среды .NET Framework с С# обусловлена наличием двух очень важных средств. Одно из них, Common Language Runtime (CLR), представляет со- бой систему, которая управляет выполнением пользовательских программ. CLR – это составная часть .NET Framework, которая делает программы переносимыми, поддерживает многоязыковое программирование и обеспечивает безопасность. 4 Второе средство, библиотека классов .NET-оболочки, предоставляет програм- мам доступ к среде выполнения. Например, если вам нужно выполнить операцию ввода-вывода, скажем, отобразить что-либо на экране, то для этого необходимо использовать .NET-библиотеку классов. Класс – это объектно-ориентированная конструкция, с помощью которой организуются программы. Если программа ог- раничивается использованием средств, определенных .NET-библиотекой классов, она может выполняться везде (т.е. в любой среде), где поддерживается .NET- система. Поскольку С# автоматически использует .NET-библиотеку классов, С#- программы автоматически переносимы во все .NET-среды. Функционирование системы CLR Система CLR управляет выполнением .NET-кода. Вот как это происходит. В результате компиляции С# программы получается не исполняемый код, а файл, который содержит специальный псевдокод, именуемый промежуточным языком Microsoft (Microsoft Intermediate Language – MSIL). MSIL определяет набор пере- носимых инструкций, которые не зависят от типа процессора. По сути, MSIL оп- ределяет переносимость ассемблера. И хотя концептуально MSIL подобен байт- коду Java, это не одно и то же. Цель CLR-системы – при выполнении программы перевести ее промежуточ- ный код в исполняемый. Таким образом, программа, подвергнутая MSIL- компиляции, может быть выполнена в любой среде, для которой реализована CLR-система. В этом частично и состоит способность среды .NET Framework до- биваться переносимости программ. Код, написанный на промежуточном языке Microsoft, переводится в испол- няемый с помощью JIT-компилятора. "JIT" – сокр. от выражения "just-in-time", означающего выполнение точно к нужному моменту (так обозначается стратегия принятия решений в самый последний подходящий для этого момент в целях обеспечения их максимальной точности). Этот процесс работает следующим об- разом. При выполнении .NET-программы CLR-система активизирует JIT- компилятор, который преобразует MSIL-код в ее "родной" код на требуемой ос- нове, поскольку необходимо сохранить каждую часть программы. Таким образом, С# программа в действительности выполняется в виде "родного" кода, несмотря на то, что первоначально она была скомпилирована в MSIL-код. Это значит, что программа будет выполнена практически так же быстро, как если бы она с самого начала была скомпилирована с получением "родного" кода, но с "добавлением" преимуществ переносимости от преобразования в MSIL-код. В результате компи- ляции сопрограммы помимо MSIL-кода образуются и мета-данные (metadata). Они описывают данные, используемые программой, и позволяют коду взаимо- действовать с другим кодом. Метаданные содержатся в том же файле, где хранит- ся MSIL-код. Сравнение управляемого кода с неуправляемым В общем случае при написании С# программы создается код, называемый управляемым (managed code). Управляемый код выполняется под управлением 5 CLR-системы. У такого выполнения в результате есть как определенные ограни- чения, так и немалые достоинства. К числу ограничений относится необходи- мость иметь, во первых, специальный компилятор, который должен создавать MSIL-файл, предназначенный для работы под управлением CLR-системы, и, во- вторых, этот компилятор должен использовать библиотеки среды .NET Framework. Достоинства же управляемого кода – современные методы управле- ния памятью, возможность использовать различные языки, улучшенная безопас- ность, поддержка управления версиями и четкая организация взаимодействия программных компонентов. Что понимается под неуправляемым кодом? Все Windows-программы до соз- дания среды .NET Framework использовали неуправляемый код, который не вы- полняется CLR-системой. Управляемый и неуправляемый код могут работать вместе, поэтому факт создания С#-компилятором управляемого кода отнюдь не ограничивает его возможность выполняться совместно с ранее созданными про- граммами. Спецификация универсального языка Несмотря на то что управляемый код обладает достоинствами, предоставляе- мыми CLR-системой, но если он используется другими программами, написан- ными на иных языках, то для достижения максимального удобства и простоты использования он должен соответствовать спецификации универсального языка (Common Language Specification – CLS). Эта спецификация описывает набор свойств, которыми одновременно должны обладать различные языки. Соответст- вие CLS-спецификации особенно важно при создании программных компонентов, которые предназначены для использования программами, написанными на других языках. CLS-спецификация включает подмножество системы поддержки общих типов (Common Type System – CTS). CTS-система определяет правила в отноше- нии типов данных. С# поддерживает как CLS-, так и CTS-спецификации. 6 1. ТИПЫ ДАННЫХ И ОПЕРАЦИИ 1.1. Система типов Язык программирования предполагает наличие правил построения корректных предложений. В свою очередь, предложения строятся из выражений. Основной характеристикой выражения является значение этого выражения. Можно утвер- ждать, что выполнение программы состоит из вычисления значений выражений, которые образуют предложения программы. Синтаксис языка не ограничивает сложности выражения. Выражение может состоять из очень большого количества более простых (элементарных) выражений. Значение выражения характеризуется типом (типом выражения). Выражение сложной структуры может сочетать элементарные выражения различных типов. При вычислении значений таких выражений требуются дополнительные усилия по преобразованию значений одного типа в значения другого типа. Большая часть этой работы производится автоматически, в ряде случаев от программиста требу- ются дополнительные усилия по разработке алгоритмов преобразования. При разработке кода любой сложности знание правил кодирования, вычисле- ния и преобразования значений различных типов является условием создания правильно выполняемой программы. В разделах этой главы обсуждаются система типов и основные характеристики категорий типов, литералы которые являются основным средством кодирования значений в выражениях, проблемы преобразования значений в выражениях, опе- раторы объявления и связанная с ними проблема области действия имени. Категории типов Система типов включает несколько категорий типов: типы значений (типы-значения), • ссылочные типы (типы-ссылки), • параметризованные типы (типы-шаблоны). • Схема типов представлена ниже. Простые (элементарные) типы – это типы, имя и основные свойства которых известны компилятору. Относительно элементарных типов компилятору не тре- буется никакой дополнительной информации. Свойства и функциональность этих типов известны. Среди простых типов различаются: целочисленные, • с плавающей точкой, • decimal, • булевский. • Иерархия системы типов .NET изображена на рис. 1. 7 Рис. 1. Система типов .NET Некоторые характеристики простых (элементарных) типов отражены в сле- дующей таблице. Используемые в .NET языки программирования основываются на общей системе типов. Между именами простых типов в C# и именами типов, объявленных в Framework Class Library, существует взаимно однозначное соот- ветствие. Смысл точечной нотации в графе "Соответствует FCL-типу" состоит в явном указании пространства имен, содержащем объявление соответствующего типа: Sbyte System.SByte Целый. 8-разрядное со знаком. Диапазон значе- ний: –128 … 127 Byte System.Byte Целый. 8-разрядное без знака. Диапазон значе- ний: 0 … 255 Short System.Int16 Целый. 16-разрядное со знаком. Диапазон значе- ний: –32 768 … 32 767 Ushort System.UInt16 Целый. 16-разрядное без знака. Диапазон значе- ний: 0 … 65 535 Int System.Int32 Целый. 32-разрядное со знаком. Диапазон значе- ний: –2 147 483 648 … 2 147 483 647 uint System.UInt32 Целый. 32-разрядное без знака. Диапазон значе- ний: 0 … 4 294 967 295 long System.Int64 Целый. 64-разрядное со знаком. Диапазон значений: –9 223 372 036 854 775 808 … 9 223 372 036 854 775 807 8 ulong System.UInt64 Целый. 64-разрядное без знака. Диапазон значе- ний: 0 … 18 446 744 073 709 551 615 char System.Char 16 (!) разрядный символ UNICODE float System.Single Плавающий. 32 разряда. Стандарт IEEE double System.Double Плавающий. 64 разряда. Стандарт IEEE decimal System.Decimal 128-разрядное значение повышенной точности с плавающей точкой bool System.Boolean Значение true или false В C# объявление любой структуры и класса основывается на объявлении пре- допределенного класса object (наследует класс object). Следствием этого является возможность вызова от имени объектов – представителей любой структуры или класса, унаследованных от класса object методов. В частности, метода ToString. Этот метод возвращает строковое (значение типа string) представление объекта. Все типы (типы-значения и типы-ссылки), за исключением простых типов- значений и пары предопределенных ссылочных типов (string и object), должны определяться (если уже не были ранее специально определены) программистами в рамках объявлений. Подлежащие объявлению типы называются производными типами. В разных CLS-языках типам, удовлетворяющим CLS-спецификации, будут со- ответствовать одни и те же элементарные типы. Система встроенных типов C# основывается на системе типов .NET Framework Class Library. При создании IL-кода компилятор осуществляет их отображение в типы из .NET FCL. К ссылочным типам относятся: классы; • интерфейсы; • массивы; • делегаты. • Для каждой категории ссылочных типов существуют собственные правила объявления. Объявления классов вводятся ключевым словом class. Правила объ- явления классов (как и правила объявления других ссылочных типов, а также ти- пов-значений, объявляемых с помощью ключевого слова struct) позволяют объяв- лять неограниченное множество разнообразных ссылочных типов и структур. Среди множества классов выделяют предопределенные ссылочные типы object и string, которым соответствуют FCL-типы System.Object и System.String. Свойст- ва, функциональность и особенности применения этих типов рассматриваются ниже. Литералы В программах на языках высокого уровня (C# в том числе) литералами назы- вают последовательности входящих в алфавит языка программирования симво- лов, обеспечивающих явное представление значений, которые используются для 9 обозначения начальных значений в объявлении членов классов, переменных и констант в методах класса. Различаются литералы арифметические (разных типов), логические, символь- ные (включая Escape-последовательности), строковые. Арифметические литералы Арифметические литералы кодируют значения различных (арифметических) типов. Тип арифметического литерала определяется следующими интуитивно по- нятными внешними признаками: стандартным внешним видом. Значение целочисленного типа обычно коди- • руется интуитивно понятной последовательностью символов '1', …, '9', '0'. Значе- ние плавающего типа также предполагает стандартный вид (точка-разделитель между целой и дробной частью, либо научная или экспоненциальная нотация – 1.2500E+052). Шестнадцатеричное представление целочисленного значения ко- дируется шестнадцатеричным литералом, состоящим из символов '0', …, '9', а так- же 'a', …, 'f', либо 'A', …, 'F' с префиксом '0x'; собственно значением. 32 768 никак не может быть значением типа short; • дополнительным суфиксом. Суфиксы l, L соответствуют типу long; ul, UL – • unsigned long; f, F – float; d, D – decimal. Значения типа double кодируются без префикса. Логические литералы К логическим литералам относятся следующие последовательности символов: true и false. Больше логических литералов в C# нет. Символьные литералы Это заключенные в одинарные кавычки вводимые с клавиатуры одиночные символы: 'X', 'p', 'Q', '7', а также целочисленные значения в диапазоне от 0 до 65 535, перед которыми располагается конструкция вида (char) – операция явного приведения к типу char: (char)34 – '''', (char)44 – ',', (char)7541 – какой символ будет здесь – не ясно. Символьные Escape-последовательности Следующие заключенные в одинарные кавычки последовательности символов являются Escape-последовательностями. Эта категория литералов используется для создания дополнительных эффектов (звонок), простого форматирования вы- водимой информации и кодирования символов при выводе и сравнении (в выра- жениях сравнения). \a Предупреждение (звонок) \b Возврат на одну позицию \f Переход на новую страницу \n Переход на новую строку \r Возврат каретки \t Горизонтальная табуляция \v Вертикальная табуляция \0 Ноль 10

See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.