Программирование на C#. Основные сведения 9785040925193

В этой книге Алексей Васильев, доктор физико-математических наук и автор популярных российских самоучителей по программи

769 152 70MB

Russian Pages 582, [1] с. [586] Year 2018

Report DMCA / Copyright

DOWNLOAD FILE

Polecaj historie

Программирование на C#. Основные сведения
 9785040925193

Table of contents :
Оглавление
Введение Язык С# и технология .Net Framework
История создания языка С#
Особенности языка С#
Программное обеспечение
Собственно о книге
Обратная связь
Благодарности
Об авторе
Глава 1 Знакомство с языком С#
Структура программы
Первая программа
Пространство имен
Использование среды разработки
Программа с диалоговым окном
Окно с полем ввода
Настройка вида диалогового окна
Консольный ввод
Считывание чисел
Форматированный вывод
Резюме
Задания для самостоятельной работы
Глава 2 Базовые типы и операторы
Переменные и базовые типы данных
Литералы
Управляющие символы
Преобразование типов
Объявление переменных
Арифметические операторы
Операторы сравнения
Логические операторы
Побитовые операторы и двоичные коды
Оператор присваивания
Сокращенные формы операции присваивания
Тернарный оператор
Приоритет операторов
Примеры программ
Резюме
Задания для самостоятельной работы
Глава 3 Управляющие инструкции
Условный оператор if
Вложенные условные операторы
Оператор выбора switch
Оператор цикла while
Оператор цикла do-while
Оператор цикла for
Инструкция безусловного перехода goto
Перехват исключений
Резюме
Задания для самостоятельной работы
Глава 4 Массивы
Одномерные массивы
Инициализация массива
Операции с массивами
Цикл по массиву
Двумерные массивы
Многомерные массивы
Массив со строками разной длины
Массив объектных ссылок
Параметры командной строки
Резюме
Задания для самостоятельной работы
Глава 5 Статические методы
Знакомство со статическими методами
Перегрузка статических методов
Массив как аргумент метода
Массив как результат метода
Механизмы передачи аргументов методу
Рекурсия
Методы с произвольным количествомаргументов
Главный метод программы
Резюме
Задания для самостоятельной работы
Глава 6 Знакомство с классами и объектами
Базовые принципы ООП
Классы и объекты
Описание класса и создание объекта
Использование объектов
Закрытые члены класса и перегрузка методов
Конструктор
Деструктор
Статические члены класса
Ключевое слово this
Резюме
Задания для самостоятельной работы
Глава 7 Работа с текстом
Класс String
Создание текстового объекта
Операции с текстовыми объектами
Методы для работы с текстом
Метод ToString ()
Резюме
Задания для самостоятельной работы
Глава 8 Перегрузка операторов
Операторные методы
Перегрузка арифметическихи побитовых операторов
Перегрузка операторов сравнения
Перегрузка операторов true и false
Перегрузка логических операторов
Перегрузка операторов приведения типов
Команды присваиванияи перегрузка операторов
Резюме
Задания для самостоятельной работы
Глава 9 Свойства и индексаторы
Знакомство со свойствами
Использование свойств
Знакомство с индексаторами
Использование индексаторов
Двумерные индексаторы
Многомерные индексаторы
Перегрузка индексаторов
Резюме
Задания для самостоятельной работы
Глава 10 Наследование
Знакомство с наследованием
Наследование и уровни доступа
Наследование и конструкторы
Объектные переменные базовых классов
Замещение членов при наследовании
Переопределение виртуальных методов
Переопределение и замещение методов
Переопределение и перегрузка методов
Наследование свойств и индексаторов
Резюме
Задания для самостоятельной работы
Заключение Что будет дальше
Предметный указатель

Citation preview

Васильев А.Н.

ПРОГРАММИРОВАНИЕ ДЛЯ НАЧИНАЮЩИХ

НА OCHOBHblE СВЕДЕНИЯ •

Подходит для студентов и самостоятельного изучения



От типов данных и переменных до операторов и массивов



Подробные примеры с разъяснениями автора



Основные сведения о структуре языка

~ийcкий"iiiiiiiillll КОМПЬЮТЕРНЫЙ

~ЕСТСЕЛЛЕР

УДК

ББК

004.43 32.973.26-018.1 В19

Васильев, Алексей. В 19

Программирование на С# для начинающих. Основные сведения Алексей Васильев.

-

Москва: Эксмо,

2018. - 592

с.

/

(Российский

-

компьютерный бестселлер).

ISBN 978-5-04-092519-3 В этой книге Алексей Васильев, доктор физико-математических наук и автор популярных российских самоучителей по программированию, пригла­

шает читателей ознакомиться с основами языка С#. Прочитав ее, вы узнаете историю языка,

его

структуру,

ознакомитесь с типами данных и перемен­

ными, операторами, циклами и множеством другой полезной информации, необходимой для работы с этим языком. УДКОО4.43 ББК

ISBN 978-5-04-092519-3

©

32.973.26-018.1

Оформление. ООО •Издательство сЭксмо•,

2018

ОГЛАВЛЕНИЕ

Введение. Язык С# и технология История создания языка С#

.Net Framework .

.7 .7 .9

.

Особенности языка С#

. . . Программное обеспечение .

12

Собственно о книге Благодарности

17 19 19

Об авторе

20

Обратная связь

Глава

1.

....

21 22 25

Знакомство с языком С#

. . . . . . . . . . . . . .

Структура программы Первая программа

Использование среды разработки

27

Пространство имен

. . . . . . . . . Программа с диалоговым окном .

31 33

Настройка вида диалогового окна

42

Окно с полем ввода

45

Консольный ввод

. . . . . . Считывание чисел . . . . .

50

Форматированный вывод Резюме

........... .

Задания для самостоятельной работы Глава

Базовые типы и операторы

54 57 59 60

Переменные и базовые типы данных

62 63

Литералы

......... . .. Преобразование типов . . Объявление переменных .

68

Управляющие символы

71 72

Арифметические операторы

81 85

2.

....

. Операторы сравнения . . . . . Логические операторы . . . . Побитовые операторы и двоичные коды Оператор присваивания

. . . . . . . . . .

Сокращенные формы операции присваивания Тернарный оператор

. .

77 86 90 100 102

Приоритет операторов

104 105

Примеры программ

106

Резюме

112 113

.. ......... .

Задания для самостоятельной работы

3

Оглавление

Глава

3.

Управляющие инструкции

Условный оператор

.

115 116

if . . . . . . .

Вложенные условные операторы

Оператор выбора

switch Оператор цикла while . . Оператор цикла do-while Оператор цикла for . . .

.

. . . .

Инструкция безусловного перехода goto

.

Перехват исключений Резюме

. . . . . . . . . . . ................... .

Задания для самостоятельной работы Глава

4.

Массивы

171 171 181 183 194 198 208 213 218 223 226 227

. . . . . . . ..

Одномерные массивы

Инициализация массива

Операции с массивами Цикл по массиву

. . . . . .

Двумерные массивы

Многомерные массивы Массив со строками разной длины

Массив объектных ссылок

. . .

Параметры командной строки Резюме

. . . ................. .

Задания для самостоятельной работы Глава

5.

Статические методы

. . . . . . . . .

Знакомство со статическими методами

.

Перегрузка статических методов Массив как аргумент метода Массив как результат метода

. . . . . . . . ...... .

Механизмы передачи аргументов методу Рекурсия

.................... .

Методы с произвольным количеством аргументов Главный метод программы Резюме

. . . . . . . . ................... .

Задания для самостоятельной работы Глава

6.

Знакомство с классами и объектами

Базовые принципы ООП

Классы и объекты

.

....... .

. . . . . . . . . . . .

Описание класса и создание объекта Использование объектов

. . . . . . . .

Закрытые члены класса и перегрузка методов Конструктор

. . . . . . . . . . . . . . . . . . . . . Статические члены класса .

Деструктор

4

123 130 142 147 150 156 159 166 168

230 231 238 242 247 254 266 271 277 278 280 282 282 286 289 294 299 303 309 314

Оглавление

Ключевое слово Резюме

321 328 330

this . . . . . . . . . . .

................... .

Задания для самостоятельной работы Глава

7.

Работа с текстом

Класс

.... . String . . . . . . . . . . .

333 334 336 344 356 373 378 379

Создание текстового объекта Операции с текстовыми объектами Методы для работы с текстом Метод

.

ToString () . . . . . . . . . .

Резюме

................. .

Задания для самостоятельной работы Глава

8.

Перегрузка операторов

Операторные методы

. . . . . .

381 381

Перегрузка арифметических

и побитовых операторов

. . . . . . . . . . . .

Перегрузка операторов сравнения Перегрузка операторов

true

и

false

Перегрузка логических операторов

. .

Перегрузка операторов приведения типов

.

385 404 423 427 432

Команды присваивания

. . . . . . . . . ................... .

и перегрузка операторов

Резюме

Задания для самостоятельной работы Глава

9.

Свойства и индексаторы

448 448 456 475 481 493 506 510 518 520

Знакомство со свойствами Использование свойств

. . . . . .

Знакомство с индексаторами Использование индексаторов Двумерные индексаторы

.

. .

Многомерные индексаторы Перегрузка индексаторов Резюме

. ............ .

Задания для самостоятельной работы Глава

10.

Наследование

....... . . .

Знакомство с наследованием

Наследование и уровни доступа Наследование и конструкторы

.

Объектные переменные базовых классов Замещение членов при наследовании

441 443 445

. .

Переопределение виртуальных методов Переопределение и замещение методов Переопределение и перегрузка методов

523 524 529 535 543 549 553 558 562

5

Оглавление

Наследование свойств и индексаторов Резюме

................... .

Задания для самостоятельной работы

565 575 576

Заключение. Что будет дальше

580

Предметный указатель

581

. . . . . .

Введение

ЯЗЫК С# И ТЕХНОЛОГИЯ

.NET FRAMEWORK

Русская речь не сложнее других. Вон Марга­ дон

-

дикий человек

-

и то выучил.

из к/ф «Формула любви»

Язык С# уже многие годы неизменно входит в список языков програм­

мирования, самых востребованных среди разработчиков программного обеспечения. Язык является базовым для технологии

.Net Framework, разработанной и поддерживаемой корпорацией Microsoft. Именно язы­ ку С# посвящена книга, которую читатель держит в руках.

История создания языка С# История, леденящая кровь. Под маской овцы скрывался лев.

из к/ф «Покровские ворота»

Язык С# создан инженерами компании

Microsoft

в

1998-2001

годах.

Руководил группой разработчиков Андерс Хейлсберг, который до того трудился в фирме

Borland над созданием компилятора для языка Pascal Delphi. появился после языков программирования С++ и Java. Бога­

и участвовал в создании интегрированной среды разработки Язык С#

тый опыт их использования бьш во многом учтен разработчиками С#.

G)

НА ЗАМЕТКУ Синтаксис языка С# похож на синтаксис языков С++ и

Java.

Но сход­

ство внешнее. У языка С# своя уникальная концепция. Вместе с тем

многие управляющие инструкции в языке С# будут знакомы тем, кто программирует в С++ и

Java.

7

Введение

Вообще же из трех языков программирования С++,

и С# исто­

Java

рически первым появился язык С++. Затем на сцену вышел язык

Java.

И уже после этого появился язык программирования С#.

Для понимания места и роли языка С# на современном рынке про­ граммных технологий разумно начать с языка программирования С, ко­ торый в свое время стал мощным стимулом для развития программных

технологий как таковых. Именно из языка С обычно выводят генеало­ гию языка С#. Мы тоже будем придерживаться классического подхода. Язык программирования С появился в

1972

году, его разработал Де­

нис Ритчи. Язык С постепенно набирал популярность и в итоге стал одним из самых востребованных языков программирования. Этому способствовал ряд обстоятельств. В первую очередь, конечно, сыграл роль лаконичный и простой синтаксис языка. Да и общая концепция языка С оказалась исключительно удачной и живучей. Поэтому ког­

да встал вопрос о разработке нового языка, который бы поддерживал парадигму объектно ориентированного программирования (ООП), то выбор естественным образом пал на язык С: язык программирова­ ния С++, появившийся в

1983

году, представлял собой расширенную

версию языка С, адаптированную для написания программ с привлече­

нием классов, объектов и сопутствующих им технологий. В свою оче­ редь, при создании языка программирования

J ava

отправной точкой

стал язык С++. Идеология языкаJаvа отличается от идеологии языка

С++, но при всем этом базовые управляющие инструкции и операторы в обоих языках схожи.

G)

НА ЗАМЕТКУ Язык программирования

Java

официально появился в

1995

году

и стал популярным благодаря универсальности программ, напи­ санных на этом языке. Технология, используемая в

Java,

позволяет

писать переносимые программные коды, что исключительно важно

при разработке приложений для использования в

lnternet.

Нет ничего удивительного, что при создании языка программирова­

ния С# традиция была сохранена: синтаксис языка С# во многих мо­ ментах будет знаком тем, кто уже программирует на С++ и такое сходство

-

Java.

Хотя

внешнее. Языки очень разные, поэтому расслабляться

не стоит. Да и базовые синтаксические конструкции в языке С# имеют свои особенности. Все это мы обсудим в книге.

8

Язык С# и технология

.Net Framework

Особенности языка С# Обо мне придумано столько небылиц, что я устаю их опровергать.

из к/ф ~Формула любви»

Язык программирования С# - простой, красивый, эффективный и гибкий. С помощью программ на языке С# решают самые разные задачи. На С#

можно создавать как небольшие консольные программы, так и програм­ мы с графическим интерфейсом. Код, написанный на языке С#, лаконичен и понятен (хотя здесь, конечно, многое зависит от программиста). В этом отношении язык программирования С# практически не имеет конкурентов.

G)

НА ЗАМЕТКУ Язык С# создавался после появления языков С++ и

Java.

В С# были

учтены и по возможности устранены «недостатки» и «недоработки», которые есть в С++ и

Java.

Иногда язык С# упоминается как усовер­

шенствованная версия языков С++ и

Java,

хотя концепции у них со­

вершенно разные, так что утверждение довольно поверхностно.

Кроме собственно преимуществ языка С#, немаловажно и то, что язык поддерживается компанией

Microsoft.

Поэтому он идеально подходит,

чтобы писать программы для выполнения под управлением операцион­ ной системы

~

Windows.

ПОДРОБНОСТИ Операционной системой Windows и технологией

пании

Microsoft

. Net Framework ком­

область применения языка С# не ограничивается.

Существуют альтернативные проекты (такие, например, как Мопо), позволяющие выполнять программы, написанные на языке С#, под управлением операционных систем, отличных от

Windows.

Вместе

с тем мы в книге будем исходить из того, что используются «родные» средства разработки и операционная система Windows.

Как отмечалось выше, язык С# является неотъемлемой частью тех­

нологии (или платформы)

.Net Framework. Основу платформы .Net Framework составляет среда исполнения CLR ( сокращение от Common Language Runtime) и библиотека классов, которая используется при

программировании на языке С#.

9

Введение

G)

НА ЗАМЕТКУ Платформа

.Net Framework

позволяет использовать и иные языки

программирования, а не только С#

Возможности

платформы

-

например, С++ или

.Net Framework

«в одно целое» программные коды,

Visual Basic.

позволяют объединять

написанные на разных языках

программирования. Это очень мощная технология, но для нас инте­ рес представляет написание программных кодов на языке С#. Имен­

но особенности и возможности языка С# мы будем обсуждать в книге.

При компилировании программного кода, написанного на языке С#, соз­ дается промежуточный код. Это промежуточный код реализован на языке

MSIL ( сокращение от Microsoft Intermediate Language ). Промежуточный CLR. Система CLR запускает JIT -компилятор ( сокращение от Just In Time), который, собственно, и пе­ код выполняется под управлением системы

реводит промежуточный код в исполняемые инструкции.

~

ПОДРОБНОСТИ Файл с программным кодом на языке С# сохраняется с расширени­ ем

. cs. После компиляции программы создается файл с расширени­ . ехе. Но выполнить этот файл можно только на компьютере, где установлена система .Net Framework. Такой код называется управля­ емым (поскольку он выполняется под управлением системы CLR). ем

Описанная нетривиальная схема компилирования программ с привле­ чением промежуточного кода служит важной цели. Дело в том, что тех­

нология

.Net Framework ориентирована на совместное использование

программных кодов, написанных на разных языках программирования.

Базируется эта технология на том, что программные коды с разных язы­

ков программирования «переводятся~ (в процессе компиляции) в про­

межуточный код на общем универсальном языке. Проще говоря, коды на разных языках программирования приводятся «к общему знаменате­ лю~, которым является промежуточный язык

~

MSIL.

ПОДРОБНОСТИ Программы, написанные на

Java, тоже компилируются

в промежуточ­

ный байт-код. Байт-код выполняется под управлением виртуальной машины

Java.

Но по сравнению с языком С# имеется принципиальное

отличие. Байт-код, в который переводится при компиляции Jаvа-про­ грамма, имеет привязку к одному языку программирования

10

-

языку

Язык С# и технология

Java.

И в

Java

.Net Framework

схема с промежуточным кодом нужна для обеспечения

универсальности программ, поскольку промежуточный байт-код не за­ висит от типа операционной системы (и поэтому переносим). Особен­ ность операционной системы учитывается той виртуальной машиной

Java,

которая установлена на компьютере и выполняет промежуточный

байт-код. Промежуточный код, который используется в технологии

.Net Framework,

не привязан к конкретному языку программирования.

Например, что при компиляции программы на языке С#, что при ком­

пиляции программы на языке Visual ций на одном и том же

Basic получаются наборы инструк­ промежуточном языке MSIL. И нужно это, еще

раз подчеркнем, для обеспечения совместимости разных программ­ ных кодов, реализованных на разных языках.

Весь этот процесс для нас важен исключительно с познавательной точки зрения. Более принципиальными являются вопросы, касающиеся осо­

бенностей собственно языка С#. Первое, что стоит отметить: язык С# полностью объектно ориентиро­ ванный. Это означает, что даже самая маленькая программа на языке С#

должна содержать описание хотя бы одного класса.

G)

НА ЗАМЕТКУ Здесь есть методологическая проблема. Состоит она в том, что не­ подготовленному читателю сложно воспринимать концепцию ООП

сразу, без предварительной подготовки. Мы найдем выход в том, чтобы использовать определенный шаблон при написании про­ грамм. Затем, по мере знакомства с языком С#, многие моменты станут простыми и понятными.

Как отмечалось выше, базовые синтаксические конструкции языка С# напоминают (или просто совпадают) соответствующие конструкции в языках С++ и/илиJаvа. Но, кроме них, язык С# содержит множество

интересных и полезных особенностей, с которыми мы познакомимся в книге.

~

ПОДРОБНОСТИ Знакомым с языками программирования С++ и/или

Java

будет

полезно узнать, что в языке С#, как и в языке С++, используются пространства имен, указатели, существует переопределение опе­

раторов. Также в С#, как и в

Java,

имеются интерфейсы, объекты

реализуются через ссылки, используется система автоматической

11

Введение

«уборки мусора». А еще в С# используются делегаты, концепция которых идеологически близка к концепции указателей на функции в С++. Массивы в С# больше напоминают массивы

Java,

но вооб­

ще в С# они достаточно специфичные. Индексаторы в С# позво­

ляют индексировать объекты

-

подобный механизм, основанный

на переопределении оператора «квадратные скобки», есть в С++. Свойства, которые используются в С#, представляют собой нечто среднее между полем и методом, хотя, конечно, больше напомина­ ют поле с особым режимом доступа.

Есть в языке С# и ~классические~ механизмы, характерные для боль­ шинства языков, поддерживающих парадигму ООП. Мы познакомим­

ся с тем, как на основе классов и объектов в языке С# реализуется ин­ капсуляция, узнаем, что такое наследование и как в С# используется полиморфизм. Будет много других тем и вопросов, которые мы изучим. Например, мы узнаем (во второй части книги), как в С# создаются при­ ложения с графическим интерфейсом, и познакомимся с основными подходами, используемыми при создании многопоточных приложений.

Но обо всем этом

- по порядку, тема за темой.

Программное обеспечение Показывай свою гравицану. Если фирменная вещь

-

возьмем!

из к/ф -«Кин-дза-дза»

Для работы с языком программирования С# на компьютере должна быть установлена платформа

.Net Framework. Компилятор языка С#

входит в стандартный набор этой платформы. Поэтому, если на компью­ тере установлена платформа .Net Framework, этого достаточно для нача­ ла программирования в С#. Обычно дополнительно еще устанавливают среду разработки, благодаря которой процесс программирования на С# становится простым и приятным.

Если мы хотим написать программу (на языке С#), сначала нам нужно

набрать соответствующий программный код. Теоретически сделать это можно в обычном текстовом редакторе. В таком случае набираем в тек­ стовом редакторе код программы и сохраняем файл с расширением

.cs

(расширение для файлов с программами, написанными на языке С#).

12

Язык С# и технология

.Net Framework

После того как код программы набран и файл с программой сохранен, ее следует откомпилировать. Для этого используют программу-компи­

csc. ехе, которая устанавливается, как отмечено выше, при уста­ .Net Framework.

лятор

новке платформы

~

ПОДРОБНОСТИ Алгоритм действий такой: в командной строке указывается назва­

ние программы-компилятора

csc. ехе,

а затем через пробел ука­

зывается название файла с программой на языке С#. Допустим, мы записали код программы в файл

MyProgram. cs.

Тогда для ком­

пиляции программы в командной строке используем инструкцию

csc. ехе MyProgram. cs

или

csc MyProgram. cs

(расширение ехе­

файла можно не указывать). Если компиляция проходит нормально, то в результате получаем файл с расширением

. ехе,

а название

файла совпадает с названием исходного файла с программой (в на­ шем случае это MyProgram. ехе). Полученный в результате компиля­ ции ехе-файл запускают на выполнение.

Файл csc.exe по умолчанию находится в каталоге C:\Windows\

Microsoft .NET\Framework внутри папки с номером версии - на­ пример, vЗ. 5 или v4. О. Также для компилирования программы из командной строки придется, скорее всего, выполнить некоторые дополнительные настройки

-

например, в переменных среды за­

дать путь для поиска компилятора

csc. ехе.

Хотя такая консольная компиляция вполне рабочая, прибегают к ней редко. Причина в том, что не очень удобно набирать код в текстовом редакторе, затем компилировать программу через командную строку

и запускать вручную исполнительный файл. Намного проще восполь­

зоваться специальной программой - интегрированной средой разработ­ ки

(IDE

от

Integrated Development Environment).

Среда разработки со­

держит в себе все наиболее важные «ингредиенты», необходимые для «приготовления» такого «блюда», как программа на языке С#. При ра­ боте со средой разработки пользователь получает в одном комплекте ре­ дактор кодов, средства отладки, компилятор и ряд других эффективных

утилит, значительно облегчающих работу с программными кодами. Мы тоже прибегнем к помощи среды разработки. Нам понадобится прило­ жение

Microsoft Visual Studio.

Загрузить установочные файлы можно с сайта компании

www .microsoft.

Microsoft

сот (на сайте следует найти страницу загрузок).

13

Введение

После установки среды разработки мы получаем все, что нужно для успешной разработки приложений на языке С#.

~

ПОДРОБНОСТИ Приложение

Microsoft Visual Studio

является коммерческим . Одна­

ко у него есть некоммерческая «упрощенная» версия

Express,

Visual Studio

которая вполне подойдет для изучения языка программи­

рования С#.

НА ЗАМЕТКУ

G)

Кроме языка программирования С# среда разработки

Visual Studio

позволяет создавать программы на языках

и С++ . Часть

Visual Basic

настроек, влияющих на функциональность среды разработки, опре­ деляется в процессе установки.

Как выглядит окно приложения

Visual Studio Express (версия 2015), по­

казано на рис . В . 1 .

р

о4, Sw,tp• • t,,~VIW,IISti,dioE,qн1Я2lnS fo,W~Dtйtop fк

Ediil

V,t:w

Dtbug

3'"'

Уиm

1ook

Ts

Wlfftdow

Нdр

.J'

► Att.ach. ..

Visual Studio

-

,,

AJaV.•

х

· а\1

p;

Discover wha 's new in Express 2015 for V Lt..,...ьo,.,. Ж

lиwta,nbptas10UfQtW

""Оьuо,

h1t:""intnc- NTTfr,1~·

~•h•tмw.,,'t/r1...,..StudlofьmScr'o'ke1

Start RнdytoOoud· powe,)'OUf~~

09,nPrOJtcl.. Opc:n trom Soi.nt ControL

Connect to Azure @

Рис. В. 1. Окно приложения

Visual Studio Express 2015

Основные операции, выполняемые при создании приложений с помо­

щью среды разработки

Visual Studio Express, мы кратко рассмотрим в ос­

новной части книги, когда будем обсуждать программные коды.

14

Язык С# и технология

Среда разработки

.Net Framework

хотя и предпочтительная, но далеко

Visual Studio

не единственная. Существуют другие приложения, используемые при

создании программ на языке С#. Причем масштабы использования аль­ тернативных средств разработки постоянно расширяются. Но, в любом случае, имеет смысл знать, какие есть варианты помимо

Visual Studio.

Нас интересуют в первую очередь среды разработки для программиро­ вания на С#, распространяемые на некоммерческой основе.

Среда разработки

SharpDevelop

является приемлемым выбором и по­

зволяет создавать приложения разного уровня сложности . По сути,

данная среда разработки является интегрированным отладчиком, вза­ имодействующим со средой

.Net Framework.

SharpDevelop показано на рис .

Окно среды разработки

В.2.

(IISNrpOc,,dop Fitt

Edi

Vicw

8Utld

DtЬug

St1rth

An.t~s

Т ook

Window

Htlp Od1ult l,l)'out •

• q

Х

• q

SшtP>g
~ Юout WJYS we an optmze our ne:twork са: and badcground operation.s

Acqualnt

#DocumentDB Loves Xamarln: Planet Scale МоЫlе Арр ln Ave

1-

Oownkмd SoluЬon

Steps Тh.1$ 6 а spedll ouest post from the DoaJmentDB tе.ащ wrtten Ьу ICit GilYrfi';IJI

Далее мы рассмотрим вопрос о том, как с помощью среды разработки

Microsoft Visual Studio Express создать программу. Итак, первое, что нам необходимо сделать - запустить среду разработки . В окне, которое от­ кроется, необходимо создать новый проект. Для этого в меню File выби­ раем команду New Project, как это показано на рис . 1.1. Cl4

р

Swt:Pave-MICroscltV~StudioЬprcu20UforW.-.dowJOesktop



Eoit

Odм.ljl

YlfW

Tum

том

Tc:st

Wfft6(:м

-

х

t-kfp

~ Cu.Rtgulo,&p,..,;o,,s

i&.OD.O

Sy,tem.YleЬ.Rowng

,л.ол

Syittm.YltЬ.ЖVКa

,ллл

CJJJJJJ

Systm1.W1ndowt..Forms.()juVis:u,Шluon Sylttm.W1nd0Wf.Forms..Dtt.V11u,1,uьon

Sy,teм.W""'--1nJм.м.nopw1'°"' Systtm.Windowt.Pmмt•tt=В равно

false

Оператор «равно». Значение выражения вида А==В равно true, если значение операнда А равно значению операнда В. В противном случае значение выражения А==В равно

!=

false

Оператор «не равно». Значение выражения вида А! =В равно true, если значение операнда А не равно значению операнда В. В противном случае значение выражения А ! = В равно

f а1s е

Обычно выражения на основе операторов сравнения используются в управляющих инструкциях или в качестве операндов в выражениях

на основе логических операторов ( если нужно записать сложное условие).

G)

НА ЗАМЕТКУ Если в выражении на основе оператора сравнения использован

символьный операнд, то он преобразуется к числовому виду. Осо­ бенности использования операторов сравнения с текстовыми опе­ рандами обсуждаются в главе, посвященной работе с текстом.

Логические операторы -

Встань-ка вон там, у той липы.

Ваше сиятельство, это не липа, это дуб. Да? А выглядит как липа ...

из к/ф «О бедном гусаре замолвите слово»

Операндами в выражениях на основе логических операторов являют­ ся значения логического типа

86

(true

или

false),

и результатом таких

Базовые типы и операторы

выражений также являются значения логического типа. Логические

операторы полезны для того, чтобы на основе некоторых простых ус­ ловий (логических значений) получить новое более сложное условие (логическое). Логические операторы перечислены и кратко описаны

в табл.

Табл.

2.4.

2.4.

Оператор &

Логические операторы Описапие Оператор ~логическое и». Результатом выражения А&В является зна­

чение

true, если оба операнда А и В равны true. Если хотя бы один false, то результатом выражения А&В является значение false из операндов равен

&&

Оператор ~логическое и» (упрощенная форма). Значение выражения

вида А& &В равно

true, если оба операнда А и В равны true. В против­ false. Если при вычислении первого операнда А оказалось, что он равен false, то значение второго ном случае результат выражения равен операнда В не вычисляется

Оператор ~логическое или». Результатом выражения А I в является зна­

чение true, если хотя бы один из операндов А или В равен true. Если оба операнда равны false, то результатом выражения А I В является значение

11

false

Оператор ~логическое или» (упрощенная форма). Значение выраже­

ния вида А 1 1В равно

true, если хотя бы один из операндов А или В

равен true. В противном случае результат выражения равен false. Если при вычислении первого операнда А оказалось, что он равен true, то значение второго операнда В не вычисляется

Оператор ~логическое исключающее или». Результатом выражения А лв

true, если один из операндов А или В равен true, false. Если оба операнда равны false или оба опе­ true, то результатом выражения длв является значение

является значение

а другой равен ранда равны

false Оператор ~логическое отрицание». Значение выражения ! А равно true, если значение операнда А равно false. Если значение операнда А равно

true, то значение выражения ! А равно false Логические операторы позволяют выполнять четыре операции: «логи­ ческое и», «логическое или», «логические исключающее или» и «логическое

отрицание». Более сложные логические операции выполняются путем

комбинированного использования логических операторов. Для выпол­ нения операций «логическое и» и «логическое или» можно использовать

две формы операторов ( основную и упрощенную). Правила вычисления результата для операции «логическое и» проиллю­

стрированы в табл.

2.5. 87

Глава

Табл.

2

2.5.

Операция «логическое и» ( А&В или А&&В )

~ true

false

true

false

true

false

false

fa l se

Если операнды А и В отождествлять с некоторыми условиями, то «слож­ ное~ условие А&В (или А&&В) состоит в том, что истинно и условие А,

и условие В. Другими словами, значение выражения А&В (или А&&В) бу­ дет равно

true,

только если равно

true

значение операнда А и одновре­

менно равно

t ru е значение операнда В. Очевидно, что если при проверке значения операнда А окажется, что его значение равно f а l s е, то резу ль­ татом логической операции будет false вне зависимости от того, како­ во значение операнда В. Этот факт принимается во внимание в работе упрощенной формы оператора & & : если при вычислении значения вы­ ражения вида А&&В оказалось, что значение операнда А равно

false,

то значение операнда В вообще не будет вычисляться. При вычислении значения выражения вида А&В значение операнда В вычисляется вне за­ висимости от того, какое значение операнда А.

G)

НА ЗАМЕТКУ На первый взгляд может показаться, что различие между операто­ рами

& и && «косметическое» . Но это не так . Проиллюстрируем это

на небольшом примере . Допустим, имеются две целочисленные пе­

ременные х и у. Рассмотрим выражение (х ! =О) & (y/x>l). Проанали­ зируем, как будет вычисляться значение такого выражения . Сначала

вычисляется значение выражения х ! =О . Оно равно

true,

если зна­

чение переменной х отлично от нуля. Затем вычисляется значение

выражения y/x>l . Оно равно true, если частное от деления у на х больше

1.

Проблема в том, что если значение переменной х равно

О, то при вычислении выражения у/х возникнет ошибка (деление на ноль) . А вот если вместо выражения (х ! =О) & (y/x>l) взять выра­ жение

( х ! =О) && (у/ х> 1) , то проблема с делением на ноль снимает­

ся автоматически : если значение переменной х равно О, то значение

выражения х!=О равно не будет.

88

false и условие y/x>l вообще вычисляться

Базовые типы и операторы

Как вычисляется результат операции «логические или», демонстрирует

табл.

2.6.

Табл.

2.6.

Операция «логическое или» ( А I в или А 1 1в )

~

true

false

true

true

true

false

true

fa l se

«Сложное» условие А I В (или А

1 1В) состоит в том, что истинно хотя бы 1 1В является

одно условие, А или В . Значением выражений А I В или А

false только в том случае, если оба операнда А и В равны false. Поэ­ тому если при вычислении значения операнда А окажется, что его зна­ чение равно

true,

не вычислять

-

то в принципе значение второго операнда В можно

резу льтат от этого не зависит. Именно по такой схеме

«работает» упрощенная форма оператора тора

1 1. При использовании опера­

I значение второго операнда вычисляется

вне зависимости от зна­

чения первого операнда.

Для операции «логическое ИСЮlЮчающее или» можно дать такую интер­ претацию: результат является истинным, если у операндов разные зна­

чения. Более детально это показано в табл.

Табл.

2.7.

Операция «логическое исключающее или » ( Алв )

~ true

false

2.7.

true

false

false

true

true

false

При одинаковых значениях операндов А и В значением выражения А лв является

f а 1 s е, а если значения операндов А и

выражения является значение

В разные, то резу льтатом

true .

89

Глава

2

НА ЗАМЕТКУ

G)

Операцию «логическое исключающее или» можно выполнить с по­

мощью операторов &,

1

и ! . Желающие могут проверить, что для логи­

ческих значений А и В результаты выражений длв и (А I В)

& ( ! (А&В))

совпадают.

Оператор

!

для выполнения операции «логическое отрицание»

-

един­

ственный логический унарный оператор . Правила выполнения этой

операции иллюстрируются в табл .

Табл.

2.8.

2.8.

Операция «логическое отрицание»

( 1А)

fa l se true

Здесь все просто. Если операнд А истинный (значение

true ), то результат

выражения

! А ложный (значение false). Если операнд А ложный (зна­ false), то результат выражения ! А истинный (значение true). И в том и в другом случае значение операнда А остается неизменным то есть выполнение команды вида ! А не меняет значение операнда А. чение

G)

НА ЗАМЕТКУ Мы еще будем обсуждать логические операторы в главе , посвящен­ ной перегрузке операторов .

Побитовые операторы и двоичные коды Варварская игра, дикая местность

-

меня тя­

нет на родину.

из к/ф «Формула любви»

Побитовые операторы предназначены для выполнения операций с це­ лочисленными значениями на уровне их побитового (двоичного) пред­ ставления. Перед тем как приступить к обсуждению собственно по­ битовых операторов, кратко рассмотрим способы кодирования чисел с помощью бинарных представлений.

90

Базовые типы и операторы

Итак, с некоторой натяжкой можно полагать, что в памяти компьютера числа представлены в виде двоичного кода, в котором есть нули и едини­

цы. Идея записи числа с помощью нулей и единиц принципиально мало

чем отличается от способа записи числа посредством цифр от О до 9. До­ пустим, параметры ао, а 1 ...

an - это некоторый набор цифр (то есть каж­ 1 и так далее до 9). Мы можем записать с их помощью число anan_ 1 ... а 2 а 1 а 0 • Данная запись озна­ чает буквально следующее: anan_ 1... а2 а 1 а0 = а0 х 10° + а 1 х 101+ а2 х 102... + an_ 1 х 10n-l + an х 10n. Например, число 123 = 3 х 10° + 2 х 101 + 1 х 102. дый такой параметр

-

это какая-то из цифр О,

А теперь воспользуемся теми же принципами, но вместо десяти цифр

( от О до 9) будем использовать всего две: О и 1. То есть теперь параметры an могут принимать одно из двух значений (О или 1). Если число записано в виде последовательности anan_ 1 ... а2 а 1 а0 , то это будет означать anan-1 ... а2а1ао = l0) { //

Отображение сообщения:

Console.WriteLine("Oгo, как много букв!");

//

Если в строке не больше десяти символов:

else{ //

Отображение сообщения:

Console.WriteLine("Oгo, как мало букв!");

//

Если введена пустая строка:

else{ Console.WriteLine("Жaль, что не ввели текст!");

Алгоритм выполнения программы простой: пользователю предлагается ввести текстовое значение, и это значение считывается и записывается

в текстовую переменную. Затем в дело вступают вложенные условные операторы. Во внешнем операторе проверяется, не пустая ли введенная пользователем текстовая строка. И если строка не пустая, то во внутрен­ нем условном операторе проверяется, не превышает ли длина строки

значение

1 О.

В зависимости от истинности или ложности этих условий

в консольное окно выводятся разные сообщения.

126

Управляющие инструкции

Для записи текстового значения, введенного пользователем, использу­

ется переменная

txt.

Значение считывается командой

txt=Console.

ReadLine (). Во внешнем условном операторе проверяется условие txt ! =" ". Если условие ложно, то выполняется команда Console. Wri teLine ("Жаль, что не ввели текст!") в еlsе-блоке внеш­ него условного оператора. Если же условие txt ! ="" во внешнем ус­ ловном операторе истинное, то в if-блоке сначала выполняется коман­ да

Console. Wr i teLine

("Спасибо,

что

ввели

текст!

") , после

чего на сцену выходит внутренний условный оператор. В этом опера­

торе проверяется условие свойством

Length,

txt. Length>l0.

Здесь мы воспользовались

которое возвращает количество символов в тексто­

вой строке. Следовательно, условие

txt. Length>l0

истинно в случае,

если текстовая строка, на которую ссылается переменная

жит больше

10 символов.

WriteLine("Oгo,

как много букв!") вif-блокевнутреннегоус­

txt. Length> 1 О ложно, Console. Wri teLine ( "Ого, как мало

ловного оператора. Если условие няется команда

txt, содер­ Console.

Если так, то выполняется команда

то выпол­ букв!")

в еlsе-блоке внутреннего условного оператора. Таким образом, возможны три принципиально разных случая:



пользователь не ввел текст;



пользователь ввел текст, состоящий больше чем из



пользователь ввел текст, состоящий не больше чем из

1О символов; 1О символов.

Результат выполнения программы может быть таким (здесь и далее жирным шрифтом выделено значение, которое вводит пользователь).

~ Результат выполнения программы (из листинга 3.3) Введите текст: Изучаем С# Спасибо, что ввели текст! Ого, как мало букв!

Это пример ситуации, когда введенный пользователем текст содержит

не больше

1О символов. Если пользователь вводит текст, состоящий из более чем 10 символов, то результат может быть следующим. ~ Результат выполнения программы (из листинга 3.3) Введите текст: Продоmкаем изучать С#

127

Глава

3

Спасибо, что ввели текст! Ого, как много букв!

Наконец, если пользователь не вводит текст, то результат выполнения программы такой.

~ Результат выполнения программы (из листинга 3.3) Введите текст:

Жаль, что не ввели текст!

Еще один пример, рассматриваемый далее, иллюстрирует схему с вло­ женными условными операторами, когда каждый следующий вну­

тренний условный оператор формирует еlsе-блок внешнего условно­ го оператора. Программа, представленная в листинге

3.4,

выполняется

по простой схеме: пользователь вводит целое число (предположительно, от

1 до 4), а программа выводит текстовое название этого числа.

~ Листинг 3.4. Определение числа

using System; class AnotherNestedifDemo{ static void Main() { //

Переменная для запоминания введенного числа:

int //

numЬer;

Отображение сообщения:

Console.Write("Bвeдитe целое число:

//

");

Считывание числа:

number=Int32.Parse(Console.Read1ine()); //

Если введена единица:

if(numЬer==l) Console.WriteLine("Eдиницa");

//

Если введена двойка:

else if(number==2) //

Если введена тройка:

else //

128

Console.WriteLine("Двoйкa");

if(number==З) Console.WriteLine("Tpoйкa");

Если введена четверка:

Управляющие инструкции

else if(number==4) //

Console.WriteLine("Чeтвepкa");

Все прочие случаи:

else

Console.WriteLine("Heизвecтнoe число");

Программа «узнает~ числа от

1

до

4

включительно. В начале выполне­

ния программы командой

Console. Wri te ( "Введите целое чис­ ") отображается приглашение ввести целое число. Число считы­ вается командой number=Int32. Parse (Console. ReadLine () )

ло:

и записывается в переменную

n umЬe r. Затем задействуется блок из вло­

женных условных операторов, в каждом из которых проверяется введен­

ное значение. При наличии совпадения в консольном окне появляется

сообщение соответствующего содержания (название введенного числа). Если пользователь ввел число, не попадающее в диапазон значений от до

4,

то выполняется команда

число")

.

1 Console. Wri teLine ( "Неизвестное

Ниже показано, как может выглядеть результат выполнения

программы, если пользователь вводит «знакомое~ для программы чис­

ло ( здесь и далее жирным шрифтом выделено введенное пользователем значение).

~ Результат выполнения программы (из листинга 3.4) Введите целое число:

2

Двойка

Если программе не удается идентифицировать число, то результат та­ кой.

~ Результат выполнения программы (из листинга 3.4) Введите целое число:

5

Неизвестное число

Как мы увидим далее, вложенные условные операторы

-

далеко

не единственный способ организовать проверку нескольких условий в программе.

129

Глава

3

Оператор выбора

switch Нет-нет, шуба подождет. Я считаю, что глав­ ное

-

посмотреть на мир.

из к/ф «БрW1Лuантовая рука»

Оператор выбора

swi tch позволяет выполнить проверку значения не­

которого выражения. В языке С# выражение, которое проверяется с по­

мощью оператора выбора

swi tch, может возвращать значение целочис­

ленного, символьного или текстового типа. Описывается оператор выбора следующим образом. Сначала указывается ключевое слово

swi tch, после

которого в круглых скобках следует проверяемое выражение. Тело операто­ ра выбора заключается в фигурные скобки. Там описываются саsе-блоки. Каждый такой блок начинается с ключевого слова case. После него указы­ вается контрольное значение (заканчивается двоеточием). Каждый саsе­

блок содержит набор команд, заканчивающийся инструкцией break. Кон­ трольные значения в саsе-блоках сравниваются со значением выражения в switсh-инструкции. Если совпадение найдено, то выполняются коман­

ды в соответствующем саsе-блоке. На случай, если совпадения нет, в опе­ раторе выбора

switch может быть предусмотрен блок default. Общий swi tch с тремя саsе-блоками пред­

шаблон описания оператора выбора

ставлен ниже (жирным шрифтом выделены ключевые элементы шаблона): switсh(выражение){

case

//

значение

1:

Команды

break; case

//

значение

2:

Команды

break; case

//

значение

Команды

break; default:

//

Команды

break; 130

3:

Управляющие инструкции

Блок defaul t не является обязательным всем. На рис.

3.6 показана схема, оператора выбора swi tch.

Сравнение

саsе-блок

-

его можно не указывать со­

иллюстрирующая способ выполнения

l___~____,

Совпадение _

Несовпадение

Команды

О break

Сравнение

. саsе-блок _ Команды ----,,---~ совпадение [~--~~--....,

о

Несовпадение

Сравнение

Совпадение

~

саsе-блок

Команды

Несовпадение

Сравнение

,---~-----.

совпадение

саsе-блок

Команды

Несовпадение

>( '

Не обязательный

(· ' .. __ ~

блок

,

....... ____ >.....

... _... __ .

Рис.

,'

,,' . . ---"'

3.6.

'j_,/

Комая.ды

о

)

break

Выполнение оператора выбора

131

Глава

3

Таким образом, при выполнении оператора выбора сначала вычисляется значение выражения в

swi tсh-инструкции.

Полученное значение по­

следовательно сравнивается с контрольными значениями в саsе-бло­ ках. При первом же совпадении выполняются команды в соответству­

ющем саsе-блоке

-

вплоть до инструкции

break.

Если совпадение

не найдено и в операторе выбора есть default-блoк, то выполняются команды в этом блоке. Если совпадение не найдено и

defaul t-блока

в операторе выбора нет, то ничего не происходит.

~

ПОДРОБНОСТИ И условный оператор, и оператор выбора, и рассматриваемые далее операторы цикла

-

все перечисленные управляющие ин­

струкции есть не только в языке С#, но и, скажем, в языках С++

и

Java.

Даже больше

-

там они практически такие же, как в язы­

ке С#. И в плане синтаксиса, и в плане принципов выполнения.

Но вот оператор выбора в С# немного особый. Во-первых, кро­ ме целочисленных и символьных выражений в операторе выбора могут использоваться и текстовые выражения. Такого нет в языке

С++ (там проверяемое выражение может быть целочисленным или символьным). Во-вторых, в С# в операторе выбора, если саsе­ блок непустой, он должен заканчиваться Ьrеаk-инструкцией. В от­ личие от С#, в языках С++ и инструкцией

break

break,

Java

саsе-блок может заканчиваться

но это не обязательно. Вообще, инструкция

используется для завершения работы операторов цикла или

оператора выбора. Само по себе завершение команд в саsе-блоке оператора выбора работу этого оператора не завершает. Други­ ми словами, если в каком-то саsе-блоке команды выполнились, то это к автоматическому завершению выполнения всего операто­

ра выбора не приводит. Чтобы завершить оператор выбора, нужна инструкция

break.

Чисто гипотетически, если бы саsе-блок не за­

канчивался инструкцией

break,

то после завершения выполнения

команд в этом блоке должно было бы начаться выполнение команд в следующем саsе-блоке (даже если нет совпадения с контроль­ ным значением в этом блоке). В языках С++ и

Java

все так и проис­

ходит. Что касается языка С#, то здесь при проверке значения вы­

ражения и сравнении его с контрольными значениями саsе-блоки могут перебираться не в том порядке, как они указаны в операторе выбора. Поэтому выполнение кода необходимо ограничить лишь блоком, для которого выявлено совпадение контрольного значе­ ния со значением проверяемого выражения. Как бы там ни было, но в языке С# непустые саsе-блоки и блок ются инструкцией блоки

132

-

break.

default

заканчива­

Как и зачем используются пустые саsе­

обсудим немного позже.

Управляющие инструкции

Несложно заметить, что в некотором смысле оператор выбора напоми­ нает блок из вложенных условных операторов, хотя полной аналогии здесь, конечно, нет. Небольшой пример, в котором использован опера­ тор выбора, представлен в листинге 3.5. Фактически это альтернативный способ реализации программы с вложенными условными операторами, в которой по введенному пользователем числу определяется название

этого числа (см. листинг

3.4).

Но на этот раз вместо условных операто­

ров использован оператор выбора

swi tch.

~ Листинг 3.5. Знакомство с оператором выбора

using System; using System.Windows.Forms; using Microsoft.VisualBasic; class SwitchDemo{ static void Main() { // int //

Переменная для запоминания введенного числа: numЬer;

Переменная для записи названия числа:

string name; //

Считывание числа:

number=Int32.Parse( Interaction.InputBox( //

Текст над полем ввода:

"Введите число:",

//

Заголовок окна:

"Число")

);

//

Использование оператора выбора для определения

//

названия введенного числа:

switch(numЬer)

{ //

Если ввели число

nаmе="Единица";

//

Название числа

break;

//

Завершение блока

//

Если ввели число

case 1:

case 2:

1

2

133

Глава

3 nаmе="Двойка";

//

Название числа

break;

//

Завершение блока

//

Если ввели число

nаmе="Тройка";

//

Название числа

break;

//

Завершение блока

//

Если ввели число

nаmе="Четверка";

//

Название числа

break;

//

Завершение блока

//

Ввели другое число

case 3:

case 4:

default: //

3

4

Текст сообщения:

nаmе="Неизвестное число";

break; } // //

//

Завершение блока

Завершение оператора выбора

Отображение сообщения:

MessageBox.Show(name,"Чиcлo");

Предыдущая версия программы была консольной. Эта версия для вво­ да числа и вывода сообщения использует диалоговые окна. Но это от­ личие ~косметическое». Идеологически важное отличие состоит в том,

что здесь мы используем оператор выбора переменная

number

swi tch.

Целочисленная

предназначена для записи числа, которое вво­

дит пользователь. Текстовая переменная

нужна для того, чтобы

name

сформировать и запомнить текстовое значение

-

название введенного

пользователем числа. Для считывания числа используем статический

метод

класса

InputBox ()

Interaction.

Для преобразования тек­

стового представления числа в целое число используем статический метод

Parse () из number.

структуры

Int32.

Результат записывается в пере­

менную

Для проверки значения переменной

number

использован оператор

выбора. Проверяемым выражением в нем является эта переменная. В саsе-блоках указаны контрольные значения

-

целые числа от

1 до 4

включительно (всего четыре саsе-блока). При наличии совпадения значения переменной

134

number

и контрольного значения в саsе-блоке

Управляющие инструкции

получает значение переменная

name (значение переменной - название

введенного числа). На случай, если совпадения не будет, предусмотрен

defaul t-блок. В этом блоке значением переменной name присваивает­ ся текст, сообщающий о невозможности идентифицировать число. Таким образом, было или не было совпадение, переменная name по­ лучит значение . Это значение используется в команде MessageBox.

Show ( name, "Число") , которой отображается диалоговое окно с сооб­ щением (название числа или сообщение о том, что число неизвестно) . На рис.

3.7 показано окно с полем ввода,

в которое введено число

2.

Число

Рис.

3.7.

В поле введено число

2

После подтверждения ввода появляется новое диалоговое окно, пока­

занное на рис.

3.8. Чиспо

~

ок

Рис.

На рис. число

3.8.

Окно с сообщением после ввода числа

3.9 показано окно с полем ввода,

2

в котором пользователь указал

5. Чиспо Вее.1:»печ1tсn0

Рис.

3.9.

В поле введено число

5

135

Глава

3

После щелчка по кнопке ОК появляется окно с сообщением о том, что число неизвестно. Окно показано на рис.

3.10.

Нrюаестное ч~,сло

ок

Рис.

3. 1 О. Окно с сообщением после ввода числа 5

Стоит заметить, что если пользователь вместо ввода числа в окне с по­

лем щелкнет, например, кнопку Отмена, то возникнет ошибка. Жела­ ющие могут подумать, как следует модифицировать программный код,

чтобы подобная ситуация обрабатывалась корректно.

G)

НА ЗАМЕТКУ В программе использовано несколько пространств имен . Простран­

ство имен

System. Windows. Forms

пользования статического метода

необходимо подключить для ис­

Show ()

из класса

MessageBox.

Метод отображает диалоговое окно с сообщением (в данном слу­ чае название введенного пользователем числа) . Пространство имен

Microsoft. VisualBasic нужно для использования статического метода InputBox () из класса Interaction. Метод отображает окно с полем ввода . Напомним, что в данном случае мы прибегаем к по­ мощи средств разработки языка имен

System

ческий метод

Parse ()

из структуры

пользуем и текстовый тип

System.

Visual Basic.

Наконец, пространство

нам понадобилось, поскольку мы используем стати­

String.

Int32 .

Вообще-то мы еще ис­

Это класс из пространства имен

Но в программе ссылка на текстовый тип выполнена через

идентификатор

string,

System. String. Так

что

являющийся псевдонимом для инструкции

string

подключения пространства имен

можно было бы использовать и без

System.

Как отмечалось ранее, саsе-блоки в операторе выбора могут быть пу­ стыми. Так поступают в случае, если необходимо, чтобы для несколь­ ких контрольных значений выполнялись одни и те же команды. Если

так, то вместо дублирования команд в соответствующих саsе-блоках (что неудобно и не очень рационально) используют несколько идущих один за другим пустых блоков. Причем в таких пустых саsе-блоках нет

136

Управляющие инструкции

даже Ьrеаk-инструкций. Пример подобного подхода проиллюстриро­ ван в следующей программе, представленной в листинге

3.6.

~ Листинг 3.6. Оператор выбора с пустыми саsе-блоками

using System; using System.Windows.Forms; using Microsoft.VisualBasic; class AnotherSwitchDemo{ static void Main() { // int //

Переменная для запоминания введенного числа: numЬer;

Переменная для текста сообщения:

string txt=""; //

//

Начальное значение переменной

Считывание числа:

number=Int32.Parse( Interaction.InputBox( //

Текст над полем ввода:

"Введите целое число от

//

1 до

9:",

Заголовок окна:

"Число")

);

//

Проверка значения переменной

switch(numЬer)

{ //

Оператор выбора

case 1:

// Если значение 1

case 9:

//

//

number:

Если значение

9

Текст сообщения:

txt="Bы ввели нечетное,

break; //

\n

но не простое число.";

Завершение блока

case 2:

//

Если значение

2

case 3:

//

Если значение

3

case 5:

//

Если значение

5

case 7:

//

Если значение

7 137

ГлаваЗ

//

Текст сообщения:

txt="Bы ввели простое число.";

break; //

Завершение блока

case 4:

//

Если значение

4

case 8:

//

Если значение

8

//

Текст сообщения:

txt="Bы ввели число

break; // case 6: //

//

степень двойки.";

Завершение блока

Если значение

6

Текст сообщения:

txt="Bы ввели

break; // //

-

6-

совершенное число.";

Завершение блока

Отображение диалогового окна с сообщением:

MessageBox.Show(txt,"Чиcлo");

Данная программа в некотором смысле напоминает предыдущую. Сна­ чала пользователю предлагается ввести целое число (в диапазоне от до

9).

Результат записывается в переменную

number.

1

После этого с по­

мощью оператора выбора проверяется значение этой переменной. Мы ~классифицируем» числа по следующим категориям: Простые числа



-

числа, которые не имеют других делителей, кроме

единицы и себя самого. В диапазоне чисел от ются числа



2, 3, 5 и 7.

Числа, которые являются степенью двойки

в эту категорию попадают числа



1 до 9 простыми явля­

4 (2

2

=

- в диапазоне от 1 до 9 3 4) и 8 (2 = 8).

Число

6 является совершенным - сумма его делителей (числа 1, 2 3) равна самому этому числу. Следующее совершенное число - это 2 8 ( его делители 1, 2, 4, 7 и 14 в сумме дают 2 8 ), но оно не попадает в интервал от 1 до 9. и

Нечетные числа, которые при этом не являются простыми



занном диапазоне это числа

138

1 и 9.

-

в ука­

Управляющие инструкции

Введенное пользователем число с помощью оператора выбора