Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

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

Покупка
Артикул: 146350.03.99
Доступ онлайн
270 ₽
В корзину
Доступно для первоначального знакомства и с нужной строгостью рассматриваются классы и интерфейсы, структуры и перечисления, строки и массивы, индексаторы и свойства, делегаты и события, исключения и обобщения, а также основополагающие принципы объектно-ориентированного и обобщенного программирования. Примеры программ позволяют читателю не только глубоко изучить синтаксис и семантику языка, но и получить практические навыки программирования на C#. Второе издание дополнено главой об обобщениях - механизме «родового», иначе обобщенного программирования. Книга рассчитана на программистов, переходящих с других языков на язык C#, на студентов и преподавателей, связанных с разработкой программ для платформы .NET.
Подбельский, В. В. Язык С#. Базовый курс : учебное пособие / В. В. Подбельский. - 2-е изд., перераб. и доп. - Москва : Финансы и статистика, 2022. - 408 с. - ISBN 978-5-00184-079-4. - Текст : электронный. - URL: https://znanium.com/catalog/product/1913989 (дата обращения: 18.05.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
uploads/2022/10/Podbelskiy_Yazyk-C-Bazovyi-kurs.pdf, огра-

Доступно для первоначального знакомства и с нужной строгостью рас-
сматриваются классы и интерфейсы, структуры и перечисления, строки и
массивы, индексаторы и свойства, делегаты и события, исключения и обоб-
щения, а также основополагающие принципы объектно-ориентированного
и обобщенного программирования. Примеры программ позволяют читате-
лю не только глубоко изучить синтаксис и семантику языка, но и получить
практические навыки программирования на C#.
Второе издание дополнено главой об обобщениях – механизме «родово-
го», иначе обобщенного программирования.
Книга рассчитана на программистов, переходящих с других языков на
язык C#, на студентов и преподавателей, связанных с разработкой программ
для платформы .NET.

УДК 004.438(075.8)
ББК 32.973.26-018.1

УДК 004.438(075.8)
ББК 32.973.26-018.1
П44

П44
Подбельский В.В.
Язык С#. Базовый курс: учеб. пособие / В.В. Подбель-
ский. – 2-е изд., перераб. и доп. – М.: Финансы и стати-
стика, 2022. – Режим доступа: https://finstat.ru/wp-content/

ниченный. – Загл. с экрана. – 408 с.: ил.
ISBN 978-5-00184-079-4

© Подбельский В.В., 2011,
2013, с изменениями, 2022
© ООО «Издательство «Финансы
ISBN 978-5-00184-079-4
и статистика», 2022

Пособие предназначено для студентов, изучающих програм-
мирование, а также для читателей, желающих самостоятельно
освоить язык программирования 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 включена в книгу при подготовке второго издания.
Она посвящена обобщениям, механизм которых позволяет суще-
ственно повысить уровень абстракции в программировании. На-
личие библиотеки обобщённых типов – одна из основных пред-
посылок снижения трудоёмкости разработки программного кода.

Язык C# – объектно-ориентированный язык со строгой ти-
пизацией.
В объектно-ориентированных языках все является объектом –
от констант и переменных базовых типов до данных агрегиро-
ванных типов любой сложности...
Но что такое тип? Тип в программировании понятие пер-
вичное. Тип некоторой сущности декларирует для нее совокуп-
ность возможных состояний и набор допустимых действий. По-
нятие сущности, мы пока не уточняем, сущностями могут быть
константы, переменные, массивы, структуры и т.д.
Наиболее часто понятие тип в языках программирования
используют в связи с понятием «переменная».
Примитивное (но пока достаточное для наших целей) опре-
деление: переменная это пара «обозначение переменной + зна-
чение переменной».
Для переменной тип вводит совокупность ее возможных зна-
чений и набор допустимых операций над этими значениями.
Пример определения переменной в Си, Си++, C# и некото-
рых других языках:

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# представляет собой класс или совокуп-
ность классов.
Внутри объявления каждого класса могут быть размещены:
1. данные класса (статические поля);
2. методы класса (статические методы);
3. данные объектов класса (не статические поля);
4. методы для работы с объектами класса (не статические
методы);
5. внутренние классы;
6. дополнительные члены, речь о которых еще впереди.

Формат простейшего определения (иначе декларации или
объявления) класса в C#:

Здесь class – служебное слово. Заключенная в обязательные
фигурные скобки совокупность полей и методов называется телом
класса. Среди полей и методов могут быть статические, относящи-
еся к классу в целом, и не статические – определяющие состояния
конкретных объектов и действия над этими объектами.
Перед телом класса – находится заголовок объявления клас-
са. Заголовок в общем случае может иметь более сложную фор-
му, но сейчас её не нужно рассматривать. Служебное слово class
всегда входит в заголовок.
имя_класса – идентификатор, произвольно выбираемый ав-
тором класса.
Отметим, что идентификатор в языке C# – это последова-
тельность букв, цифр и символов подчеркивания, которая не
может начинаться с цифры. В отличие от многих предшествую-
щих языков в идентификаторах C# можно использовать буквы
разных алфавитов, например, русского или греческого. В языке
C# прописная буква отличается от той же самой строчной. При-
меры идентификаторов, наверное, излишни.
Среди методов классов исполнимой программы (приложе-
ния) на языке C# обязательно присутствует статический метод
со специальным именем Main. Этот метод определяет точку входа
в программу – именно с выполнения операторов метода Main( )
начинается исполнение ее кода. Исполняющая программу сис-
тема неявно (невидимо для программиста) создает единствен-
ный объект класса, представляющего программу, и передает уп-
равление коду метода Main( ).
Прежде чем приводить примеры программ, необходимо отме-
тить, что практически каждая программа на языке C# активно
использует классы библиотеки из .NET Framework. Через библио-
течные классы программе доступно то окружение, в котором она
выполняется. Например, класс Console представляет в программе
средства для организации консольного диалога с пользователем.
Применение в программе библиотеки классов предполагает
либо создание объектов классов этой библиотеки, либо обраще-
ния к статическим полям и методам библиотечных классов.
Чтобы применять методы и поля библиотечных классов и со-
здавать их объекты, необходимо знать состав библиотеки и воз-

можности ее классов. Библиотека .NET настолько обширна, что
на первом этапе изучения программирования на C# придется
ограничиться только самыми скромными сведениями о ней. Cо
средствами библиотеки классов будем знакомиться, используя
некоторые из этих средств в небольших иллюстративных про-
граммах. Вначале будем рассматривать программы, в каждой из
которых будут применяться только статические члены некоторых
библиотечных классов, и будет только один класс с единствен-
ным методом Main(). При таких ограничениях программирова-
ние на языке C# превращается в процедурное программирова-
ние. Основное отличие от традиционного императивного подхода
других процедурных языков – применение особого синтаксиса
для обращения к статическим членам библиотечных классов и
методам объектов, представляющих в программах данные.
Для иллюстрации приведенных общих сведений о програм-
мах на C# рассмотрим программу, которая выводит в консоль-
ное окно экрана фразу «Введите Ваше имя:», считывает имя,
набираемое пользователем на клавиатуре, а затем приветствует
пользователя, используя полученное имя.

″″″″″″″″″″″″″″″″″″″″″″″″″Для тех, кто не знаком с синтаксисом Си, Си++ и производ-
ных от них языков, отметим, что первая строка – однострочный
комментарий.
Вторая строка class helloUser – это заголовок определения
класса с именем helloUser. Напомним, что class — служебное
слово, а идентификатор helloUser выбрал автор программы.
Далее в фигурных скобках – тело класса.

В классе helloUser только один метод с заголовком static void
Main()
Как уже сказано, служебное слово static – это модификатор
метода класса (отличающий его от методов объектов). Служебное
слово void определяет тип, соответствующий особому случаю «отсутствие 
значения». Его использование в заголовке означает отсутствие 
возвращаемого методом Main() значения. В заголовке каждого 
метода после его имени в круглых скобках помещается список
параметров (спецификация параметров). В нашем примере параметры 
у метода не нужны, но круглые скобки обязательны. Отметим, 
что имя Main не является служебным словом C#.
Вслед за заголовком в определении каждого метода помещается 
его тело – заключенная в фигурные скобки последовательность 
определений, описаний и операторов. Рассмотрим тело
метода Main() в нашем примере.
string name;  – это определение (декларация) строковой переменной 
с выбранным программистом именем name. string –
служебное слово языка C# – обозначение предопределенного
типа (System.String) для представления строк. Подробнее о типах 
речь пойдет позже.
Для вывода информации в консольное окно используется
оператор:

″″″″″″″″″″Это обращение к статическому методу WriteLine() библиотечного 
класса Сonsole, представляющего в программе консоль.
System – обозначение пространства имен (namespace), к которому 
отнесен класс Console (о пространствах имён – чуть позже
в § 1.3).
Метод WriteLine() класса Console выводит значение своего
аргумента в консольное окно. У этого метода нет возвращаемого 
значения, но есть аргумент. В рассматриваемом обращении к
методу WriteLine() аргументом служит строковая константа ″Введите 
Ваше имя: ″. Ее значение – последовательность символов,
размещенная между кавычек. Именно это сообщение в качестве
«приглашения» увидит пользователь в консольном окне при
выполнении программы.
Текст с приглашением и последующим ответом пользователя 
для нашей программы могут иметь, например, такой вид:

Доступ онлайн
270 ₽
В корзину