Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSBasicCourse2ndedPodbelsky / CSBasicCourse2ndedPodbelsky.rtf
Скачиваний:
27
Добавлен:
22.03.2016
Размер:
11.9 Mб
Скачать

В. В. Подбельский

Язык C#. Базовый курс

Рекомендовано

для студентов высших учебных заведений

Москва - 201

3

В.В Подбельский Язык C#. Базовый курс. 2-е издание.

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

строгостью рассматриваются классы и интерфейсы, структуры и

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

делегаты и события, исключения и обобщений, а также

основополагающие принципы объектно-ориентированного и

обобщенного программирования. Примеры программ позволяют

читателю не только глубоко изучить синтаксис и семантику

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

C#.

Второе издание дополнено главой об обобщениях –

механизме "родового" иначе обобщенного программирования.

Книга рассчитана на программистов, переходящих с других

языков на язык C#, на студентов и преподавателей, связанных с

разработкой программ для платформы .NET.

Предисловие

Пособие предназначено для студентов, изучающих программирование, а также

для читателей, желающих самостоятельно освоить язык программирования C#. В

отличие от достаточно многочисленных руководств по C# данная книга посвящена

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

практическом применении.

Такой язык программирования, как C#, нельзя изучать «линейно», условно

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

(языка C# и программирования на C#) будет проходить «по спирали». К некоторым

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

пояснениями, в следующих темах обращаются вновь, постепенно полностью

объясняя их.

Пособие состоит из 18 глав. Глава 1 дает общее представление о структуре

простейшей программы на языке С#. Главы 2–6 знакомят читателя с такими

базовыми понятиями процедурного программирования, как константы, переменные,

выражения, операторы. Однако процедурный подход к созданию программ на языке

C# с неизбежностью приводит к применению тех или иных классов и объектов.

Даже традиционные для языков программирования переменные базовых типов в

языке C# являются «проекциями» на классы из .NET Framework. Платформа .NET

Framework и особенности базовых типов языка C# как ее библиотечных классов

описаны в главе 5.

Главы 7 и 8 посвящены массивам и строкам. Для массивов и строк языка C#

приходится различать объекты и ссылки на них. Тем самым читатель с

необходимостью приходит к пониманию назначения конструкторов и особенностям

применения операции new.

В главе 9 рассмотрены синтаксис и семантика методов языка C#, все виды

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

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

аргументов.

Глава 10, описывающая классы как контейнеры их статических членов,

завершает

изложение

традиционного

для

процедурных

языков

подхода

к

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

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

задачи программирования. Используя средства глав 2–10, читатель может перевести

на C# программу с языка Си, Паскаль или Фортран. Собственно объектно-

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

классов (глава 11). Глава 12 продолжает эту тему и посвящена концепции

инкапсуляции, т. е. изучению средств создания классов, объекты которых скрывают

свою внутреннюю структуру.

Глава 13 посвящена отношениям между классами (и их объектами). Особое

внимание уделено наследованию, абстрактным классам и виртуальным членам.

Язык C# дает возможность программисту вводить свои (пользовательские)

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

интерфейсов и делегатов. Эти средства рассматриваются в главах 14, 15 и 17. В

главе

14

рассматриваются

интерфейсы,

обеспечивающие

множественное

наследование и создание разных классов, объекты которых обладают единой

функциональностью. Структуры и перечисления в языке C# – это типы значений.

Именно поэтому в главе 15 рассмотрены операции упаковки и распаковки.

В главе 16 подробно рассмотрен механизм исключений – их обработка и

генерация. Описанных возможностей библиотечных классов исключений обычно

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

В .NET Framework делегаты тесно связаны с обработкой событий. Оба этих

механизма изучаются в главе 17. Особое внимание уделено реализации с помощью

делегатов схемы обратных вызовов.

Глава 18 включена в книгу при подготовке второго издания. Она посвящен

а

обобщениям, механизм которых позволяют существенно повысить уровень

абстракции в программировании. Наличие библиотеки обобщённых типов – одно из

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

Глава 1. Объектная ориентация программ

на C#

1.1. Типы, классы, объекты

Язык C# – объектно-ориентированный язык со строгой типизацией.

В объектно-ориентированных языках все является объектом – от констант и

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

Но что такое тип? Тип "тип" в программировании понятие первичное. Тип

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

набор допустимых действий. Понятие сущности, мы пока не уточняем, сущностями

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

Наиболее часто понятие тип в языках программирования используют в связи с

понятием "переменная".

Примитивное (но пока достаточное для наших целей) определение: переменная

"переменная" это пара "обозначение переменной + значение переменной".

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

допустимых операций над этими значениями.

Пример определения переменной в Си, Си++, C# и некоторых других языках:

int spot=16;

spot – обозначение (имя) переменной, 16 – ее значение в данный момент (после

этого определения), int – название типа переменной. Этот тип int определяет для

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

операций с правилами их выполнения. Например, для spot определена операция

получения остатка от деления (%) и особым образом определено деление на целую

величину (/ в этом случае обозначает операцию целочисленного деления).

Результат spot/5 равен 3, а значением выражения spot%3 будет 1.

Типы в языке C# введены с помощью классов (а также структур,

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

Понятие

класса

в

теоретических

работах,

посвященных

объектно-

ориентированной методологии, обычно вводится на основе понятия "объект".

Объект "объект" определяют по-разному.

Приведем примеры определений (см., например, [3]).

"Объектом называется совокупность данных (полей), определяющих состояние

объекта, и набор функций (методов), обеспечивающих изменение указанных

данных (состояния объекта) и доступ к ним".

"Объект – инкапсуляция множества операций (методов), доступных для

внешних вызовов, и состояния, запоминающего результаты выполнения указанных

операций"

После подобного определения в пособиях по объектно-ориентированному

программированию перечисляются обязательные признаки объектов:

1. различимость;

2. возможность одного объекта находиться в разных состояниях (в разное

время);

3. возможность динамического создания объектов;

4. "умение" объектов взаимодействовать друг с другом с помощью обменов

сообщениями;

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

внешние для объекта воздействия);

6. инкапсуляция данных внутри объектов.

Введя понятие объекта, класс "класс" определяют как механизм, задающий

структуру (поля данных) всех однотипных объектов и функциональность объектов,

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

В процессе развития объектно-ориентированного подхода и при его реализации

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

т

существовать такие, которые принадлежат не единичному объекту, а всем

объектам класса. То же было выявлено и для методов – некоторые из них могли

определять не функциональность отдельного (каждого) объекта, а быть общими

для класса (для всех его объектов). В совокупности поля и методы как класса, так и

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

Для иллюстрации этих понятий и особенно отличий полей и методов класса от

полей и методов его объектов рассмотрим пример: Класс с названием "студент

группы N-го курса".

поля (данные) объекта: ФИО, оценки за сессию, взятые в библиотеке книги и т.д.

методы объекта: сдать экзамен, получить книги в библиотеке и т.д.

поля (данные) класса: номер курса (N), даты экзаменов, количество дисциплин в

семестре и т.д.

метод класса: перевести группу на следующий курс – изменятся все данные класса,

но не все объекты останутся в этом измененном классе (не обязательно все

студенты будут переведены на следующий курс).

Различие между данными и методами объектов и данными и методами их

класса существенно используется в языке C#. Чтобы их различать в определении (в

объявлении) класса его данные и его методы снабжаются специальным

модификатором static (статический). Примеры мы приведем позже...

Итак, класс играет две роли:

класс это контейнер для методов класса и данных класса;

класс это «трафарет», позволяющий создавать конкретные объекты.

Для каждого конкретного объекта, класс "класс" определяет структуру его

состояния и поведение. Состояние объекта задается совокупностью значений его

полей. Поведение объекта "поведение объекта" определяется набором методов,

относящихся к объектам данного класса.

В соответствии с объектной ориентацией языка C# - всякая программа на

языке C# представляет собой класс или совокупность классов.

Внутри объявления каждого класса могут быть размещены:

данные класса (статические поля);

методы класса (статические методы);

данные объектов класса (не статические поля);

методы для работы с объектами класса (не статические методы);

внутренние классы;

дополнительные члены, речь о которых еще впереди.

Соседние файлы в папке CSBasicCourse2ndedPodbelsky