Читаем C#. Объектно ориентированное программирование онлайн бесплатно
C#. Объектно ориентированное программирование
Компьютеры и Интернет / Программирование, программы, базы данныхББК 32.973.2-018.1я7
УДК 004.43(075)
В19
Васильев А.
В19 C#.
Объектно-ориентированное программирование: Учебный курс. — СПб.: Пи-
тер, 2012. — 320 с.: ил.
ISBN 978-5-459-01238-5
Книга представляет собой учебный курс по объектно-ориентированному программированию на
языке C#. Описаны синтаксические конструкции, операторы управления и объектная модель, ис-
пользуемые в C#. В издание включены основные темы для изучения данного языка программиро-
вания, а именно: базовые типы данных и операторы, управляющие инструкции, массивы, классы
и объекты, наследование, индексаторы, свойства, делегаты, обработка исключительных ситуаций, многопоточное программирование, перегрузка операторов, разработка Windows-приложений
и многое другое. Большое внимание уделяется созданию программ с графическим интерфейсом.
ББК 32.973.2-018.1я7
УДК 004.43(075)
Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было фор-
ме без письменного разрешения владельцев авторских прав.
Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как
надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не
может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за
возможные ошибки, связанные с использованием книги.
ISBN 978-5-459-01238-5
© ООО Издательство «Питер», 2012
Оглавление
Вступление. Язык программирования C# .....................................................7
Краткий курс истории языкознания ............................................................................8
Особенности и идеология C# ...................................................................................... 10
Программное обеспечение ............................................................................................ 12
Установка Visual C# Express ........................................................................................ 14
Немного о книге ............................................................................................................... 21
Благодарности ................................................................................................................... 22
От издательства ................................................................................................................ 22
Глава 1. Информация к размышлению: язык C# и даже больше ...................23
Очень простая программа ............................................................................................. 24
Несколько слов об ООП ................................................................................................ 34
Еще одна простая программа ....................................................................................... 36
Консольная программа .................................................................................................. 42
Глава 2. Классы и объекты .......................................................................53
Описание класса ............................................................................................................... 53
Объектные переменные и создание объектов ........................................................ 56
Перегрузка методов ......................................................................................................... 60
Конструкторы и деструкторы ...................................................................................... 64
Наследование и уровни доступа ................................................................................. 72
Объектные переменные и наследование .................................................................. 81
Замещение членов класса и переопределение методов ...................................... 85
Статические члены класса ............................................................................................ 93
6
Оглавление
Глава 3. Основы синтаксиса языка C#.........................................................98
Базовые типы данных и основные операторы ....................................................... 98
Основные управляющие инструкции ..................................................................... 108
Массивы большие и маленькие ................................................................................ 125
Массивы экзотические и не очень ........................................................................... 134
Знакомство с указателями .......................................................................................... 140
Глава 4. Перегрузка операторов ..............................................................143
Операторные методы и перегрузка операторов .................................................. 143
Перегрузка арифметических операторов и операторов
приведения типа ............................................................................................................. 151
Перегрузка операторов отношений ......................................................................... 163
Глава 5. Свойства, индексаторы и прочая экзотика ...................................175
Свойства ............................................................................................................................ 176
Индексаторы .................................................................................................................... 184
Делегаты ............................................................................................................................ 193
Знакомство с событиями ............................................................................................. 199
Элементарная обработка событий ........................................................................... 203
Глава 6. Важные конструкции .................................................................211
Перечисления .................................................................................................................. 211
Знакомство со структурами ....................................................................................... 214
Абстрактные классы ...................................................................................................... 218
Интерфейсы ..................................................................................................................... 227
Интерфейсные переменные ....................................................................................... 237
Глава 7. Методы и классы во всей красе ...................................................242
Механизм передачи аргументов методам .............................................................. 242
Аргументы без значений и переменное количество аргументов ................... 251
Передача типа в качестве параметра ....................................................................... 256
Использование обобщенного типа данных ........................................................... 261
Обработка исключительных ситуаций ................................................................... 265
Многопоточное программирование ........................................................................ 273
Глава 8. Приложение с графическим интерфейсом: учебный проект .........280
Общие сведения о графических элементах .......................................................... 282
Программный код и выполнение программы ...................................................... 284
Наиболее значимые места программного кода .................................................... 300
Вместо заключения. Графический конструктор .........................................305
Создание простого окна с кнопкой .......................................................................... 306
ВСТУПЛЕНИЕ Язык
программирования C#
Наука — это организованное знание.
У прогрессивного человечества, форпостом которого является армия про-
граммистов, есть такие чудесные языки программирования, как C++ и Java.
На первый взгляд может показаться, что этого вполне достаточно. Но не
все так просто.
Какой же язык программирования дополняет тандем из C++ и Java? Это
язык программирования C# (читается «
ПРИМЕЧАНИЕ Такое довольно оригинальное название языка программирования
имеет следующее не менее оригинальное объяснение. Как извест-
но, оператор инкремента ++, который используется в С++, Java и C#, предназначен для увеличения на единицу операнда, который ис-
пользуется с этим оператором. Поэтому, например, название С++
можно объяснить как «следующая версия после С». Язык C# — это
«следующая версия после С++». Символ # в данном случае интер-
претируется как два оператора инкремента ++, объединенных, путем
«сдвига» и «уплотнения» четырех плюсов (по два плюса в ряд), в один символ.
Язык программирования C# достаточно молодой. Он создавался в конце
90-х годов прошлого столетия разработчиками из компании Microsoft. Од-
ним из отцов-основателей языка считается
8
Вступление. Язык программирования C#
который создал себе имя как идейный архитектор таких чудесных проек-
тов, как Turbo Pascal и Delphi. Идеологически и синтаксически язык C#
близок к С++ и Java. Во всяком случае, если читатель знаком хотя бы с од-
ним из этих языков, он найдет для себя много знакомых пассажей. Все это
не случайно, поскольку язык C# является логическим продолжением язы-
ка C++ (во всяком случае, по мнению разработчиков языка) и в некотором
смысле конкурентом языка Java. Но обо всем по порядку.
Краткий курс истории языкознания
Разница между языками столь велика, что
одно и то же выражение кажется грубым
в одном языке, и возвышенным в другом.
Вначале был язык программирования, и это был язык С. Затем появился
язык С++, который стал расширением языка С до объектно-ориентиро ван-
ной парадигмы. Другими словами, в языке С++ появилась возможность
использовать все ужасные атрибуты объектно-ориентрованного програм-
мирования (сокращенно
другое. Поэтому язык С++ во многом стал «законодателем моды» и задал
стиль на годы вперед. Кроме того, принципиальная особенность языка С++
состоит в том, что это язык «переходной» — в С++ можно писать как про-
граммы в рамках парадигмы ООП, так и обычные программы, не имеющие
никакого отношения к ООП.
ПРИМЕЧАНИЕ Другими словами, при создании программного кода в С++ классы
и объекты можно использовать, а можно не использовать. В языках
Java и C# это непозволительная роскошь.
Язык программирования Java появился после языка С++. Зародился и раз-
рабатывался язык Java в недрах компании Sun Microsystems (сейчас она
поглощена корпорацией Oracle). В отличие от С++, язык Java полностью
объектно-ориентированный. Данное жизнеутверждающее обстоятельство
имеет самые неприятные последствия: для написания самой маленькой
программы в Java приходится создавать класс. В принципе, с технической
точки зрения ничего сложного в этом нет, но вот психологический барьер
есть, и особенно он ощутим для новичков. Вместе с тем язык Java завоевал
свое место под солнцем благодаря другим своим уникальным свойствам.
В первую очередь, это относительная универсальность программных кодов
Краткий курс истории языкознания 9
в плане непритязательности к типу операционной системы и параметрам
аппаратного обеспечения. Язык Java создавался под лозунгом «написано
единожды, работает везде». Результат достигается за счет компиляции
программного кода в промежуточный байт-код, который выполняется спе-
циальной программой — виртуальной Java-машиной.
ПРИМЕЧАНИЕ В С++ программа компилируется в исполнительный код. В Java после
компиляции получается промежуточный код. Поэтому в общем случае
программы, написанные на С++, работают быстрее, чем аналогичные
программы, написанные на Java. Вместе с тем программные коды
Java более универсальны. Во времена всеобщего развития интернет-
технологий вопрос универсальности становится определяющим. Это
обстоятельство во многом и обусловило популярность и бурное раз-
витие Java. Кроме того, технология Java является хорошей платфор-
мой для программирования бытовых устройств, а основные средства
разработки для Java распространяются бесплатно.
Что касается синтаксиса Java, то он во многом напоминает синтаксис язы-
ка С++. Вообще, очень многие моменты в языках схожи. Фактически, раз-
работчики Java попытались выявить, учесть и устранить все неприятные
моменты, обнаруженные в С++. Получилось неплохо, но не идеально. Тем
не менее язык Java прошел проверку временем. И когда данное обстоятель-
ство стало более-менее очевидным, на сцену вышла корпорация Microsoft с языком программирования C#.
Нередко о языке C# отзываются как об «ответе» со стороны компании
Microsoft в сторону компании Sun Microsystems. Вместе с тем язык C#
нельзя (да и неправильно) рассматривать как банальную альтернативу
языку Java. У Microsoft в отношении языка C# далеко идущие планы.
Язык C# ориентирован в первую очередь на операционную систему
Windows.
Почему-то это нисколько не удивляет. И хотя периодически выпол-
няются попытки расширить область применимости языка C# и со-
путствующих технологий на другие операционные системы, питать
иллюзии по этому поводу все же не стоит.
Другими словами, если мы собираемся программировать на C#, то мы со-
бираемся программировать для Windows. Связано это не столько с язы-
ком C#, сколько с платформой
язык для реализации в рамках технологии .NET. Это еще одно детище
10
Вступление. Язык программирования C#
Microsoft, на самом деле тесно связанное с языком C#. Bот c этой парой
нам надо бы разобраться.
Особенности и идеология C#
Идеи — редкая дичь в лесу слов.




