Конспект лекций (C#)-unlocked. 1 Основные сведения о C# Особенности языка
Скачать 1.97 Mb.
|
1 Содержание 1 Основные сведения о C# .................................................................................................. 4 1.1 Особенности языка .................................................................................................. 4 1.2 Типы данных ............................................................................................................ 5 1.3 Переменные ............................................................................................................. 7 1.4 Константы (литералы) ............................................................................................ 8 1.5 Операторы, используемые при построении выражений ..................................... 8 1.6 Класс Object ........................................................................................................... 10 1.7 Класс Math .............................................................................................................. 11 1.8 Класс Convert ......................................................................................................... 12 1.9 Пространство имён ................................................................................................ 13 1.10 Типы, допускающие значение null .................................................................... 16 2 Операторы и конструкции С# ....................................................................................... 17 2.1 Операторы присваивания ..................................................................................... 17 2.2 Приведение типов ................................................................................................. 17 2.3 Операторы инкремента и декремента ................................................................. 19 2.4 Операторные скобки {} ........................................................................................ 19 2.5 Условный оператор if ............................................................................................ 20 2.6 Логические операторы «И» и «ИЛИ» ................................................................. 21 2.7 Условный оператор ? : .......................................................................................... 21 2.8 Оператор выбора switch и оператор прерывания break ..................................... 22 2.9 Оператор цикла for ................................................................................................ 24 2.10 Оператор цикла while .......................................................................................... 25 2.11 Оператор цикла do...while ................................................................................... 26 2.12 Операторы прерываний break (для циклов) и continue ................................... 26 2.13 Оператор new ....................................................................................................... 27 2.14 Массивы ............................................................................................................... 27 2.14.1 Одномерные массивы .............................................................................. 27 2.14.2 Многомерные массивы ............................................................................ 28 2.14.3 Ступенчатые массивы .............................................................................. 29 2.14.4 Работа с массивами как с объектами ..................................................... 30 2.15 Оператор цикла foreach....................................................................................... 32 2.16 Строки................................................................................................................... 32 2.17 Перечисления ....................................................................................................... 38 2.18 Обработка исключений ....................................................................................... 39 2.18.1 Класс Exception и стандартные исключения ......................................... 40 2.18.2 Блок try...catch ........................................................................................... 41 2.18.3 Блок try...finally ......................................................................................... 43 2.18.4 Блок try...catch...finally ............................................................................. 44 2.18.5 Оператор throw ......................................................................................... 45 3 Классы. Основные понятия ........................................................................................... 47 3.1 Общая схема .......................................................................................................... 47 3.2 Спецификаторы доступа ....................................................................................... 47 2 3.3 Поля ........................................................................................................................ 48 3.4 Создание объекта и доступ к его членам ............................................................ 48 3.5 Методы ................................................................................................................... 49 3.5.1 Перегрузка методов ................................................................................... 52 3.5.2 Новое в версии C# 4.0 ................................................................................ 54 3.6 Конструкторы ........................................................................................................ 56 3.7 Деструкторы ........................................................................................................... 58 3.8 Инициализаторы объектов ................................................................................... 59 3.9 Свойства ................................................................................................................. 59 3.10 Индексаторы ........................................................................................................ 62 4 Классы. Расширенное использование .......................................................................... 66 4.1 Статические классы и члены классов ................................................................. 66 4.2 Наследование ......................................................................................................... 68 4.2.1 Наследование и конструкторы .................................................................. 70 4.2.2 Переопределение членов класса ............................................................... 71 4.3 Полиморфизм ......................................................................................................... 73 4.3.1 Виртуальные методы ................................................................................. 76 4.3.2 Абстрактные классы и члены классов ..................................................... 78 4.3.3 Операторы as и is ........................................................................................ 79 4.3.4 Модификатор sealed ................................................................................... 81 4.4 Перегрузка операторов ......................................................................................... 81 5 Интерфейсы ..................................................................................................................... 85 6 Делегаты, лямбда-выражения и события ..................................................................... 92 6.1 Делегаты ................................................................................................................. 92 6.2 Анонимные методы и лямбда-выражения .......................................................... 95 6.3 События .................................................................................................................. 96 7 Универсальные типы .................................................................................................... 101 7.1 Общая схема ........................................................................................................ 101 7.2 Ограничения по параметрам типа ..................................................................... 102 7.2.1 Ограничение на базовый класс ............................................................... 103 7.2.2 Ограничение на интерфейс ..................................................................... 104 7.2.3 Ограничение на конструктор .................................................................. 105 7.2.4 Ограничения ссылочного типа и типа значения ................................... 106 7.2.5 Установление связи между двумя параметрами с помощью ограничения ........................................................................................... 106 7.3 Параметры типы в методах ................................................................................ 107 7.4 Некоторые универсальные типы С# .................................................................. 108 7.4.1 Класс Array................................................................................................ 108 7.4.2 Класс List 3 8 Работа с файлами .......................................................................................................... 125 8.1 Класс File .............................................................................................................. 125 8.2 Работа с файлами как с потоками ...................................................................... 127 8.2.1 Класс FileStream ....................................................................................... 128 8.2.2 Класс StreamReader .................................................................................. 129 8.2.3 Класс StreamWriter ................................................................................... 131 8.2.4 Класс BinaryReader ................................................................................... 132 8.2.5 Класс BinaryWriter ................................................................................... 134 4 1 Основные сведения о C# Язык C# происходит от двух распространённых языков программирования: C и C++. От языка C он унаследовал синтаксис, многие ключевые слова и операторы, а от C++ – усовершенствованную объектную модель. Кроме того, C# близко связан с Java 1 Имея общее происхождение, но во многом отличаясь, С# и Java похожи друг на друга как близкие, но не кровные родственники. В обоих языках поддерживается распределённое программирование и применяется промежуточный код для обеспе- чения безопасности и переносимости, но отличия кроются в деталях реализации. Кроме того, в обоих языках предоставляется немало возможностей для проверки ошибок при выполнении, обеспечения безопасности и управляемого исполнения, хотя и в этом случае отличия кроются в деталях реализации. Но в отличие от Java язык С# предоставляет доступ к указателям – средствам программирования, кото- рые поддерживаются в C++. Следовательно, С# сочетает в себе эффективность, при- сущую C++, и типовую безопасность, характерную для Java. Более того, компро- миссы между эффективностью и безопасностью в этом языке программирования тщательно уравновешены и совершенно прозрачны. Однако по сравнению с C++, С# имеет ряд отличий, упрощающих синтаксис и устраняющих вероятность появления некоторых ошибок в программах. 1.1 Особенности языка К особенностям языка C# (некоторые особенности заимствованы из C++) можно отнести следующие: язык является объектно-ориентированным, поэтому: даже простейшая программа состоит, как минимум, из одного класса; отсутствуют глобальные переменные и методы; простейшие типы являются классами и поддерживают ряд базовых операций; язык чувствителен к регистру символов, т.е. идентификаторы count и Count счи- таются различными; при использовании методов требуется указание после идентификатора метода круглых скобок, даже если метод не имеет параметров; переменные могут быть описаны в любом месте программы, при этом область ви- димости переменных зависит от места (блока программы) их описания; все массивы могут изменять размеры (фактически путём создания нового масси- ва); идентификаторы переменной и типа могут совпадать; используется «сборка мусора», поэтому явное освобождение памяти во многих случаях не используется. 1 Здесь и далее некоторые фрагменты конспекта взяты из книг: Шилдт Г. C# 3.0: Полное руководство / Г. Шилдт.–М.: ООО «И.Д. Вильямс»,2010.–992 с.:ил. Шилдт Г. C# 4.0: Полное руководство / Г. Шилдт.–М.: ООО «И.Д. Вильямс»,2011.–1056 с.:ил. 5 1.2 Типы данных Любые данные, используемые в программе, размещаются в оперативной па- мяти компьютера. Для того чтобы программа могла правильно интерпретировать содержимое памяти, ей требуется знать структуру данных, хранящихся в этой памя- ти, которая определяется типом данных. Типы данных могут быть как заранее предопределёнными в среде программирования, так и созданными программистом при разработке программы. В C# все общие типы данных делятся на два вида: типы значения и ссылоч- ные типы. Переменные типа значения содержат сами значения, в то время как пе- ременные ссылочного типа содержат ссылку на место в памяти, где значения можно найти. Также переменная ссылочного типа может содержать значение null , гово- рящее о том, что переменная ни на что не указывает. Общая структура типов приведена на рисунке 1.1. Рисунок 1.1 – Структура типов данных Целочисленные типы данных. Целочисленные типы данных (см. табли- цу 1.1) отличаются друг от друга размером занимаемой памяти и, следовательно, диапазоном целых чисел, которые они могут хранить. Таблица 1.1 – Характеристика целочисленных типов данных 1 Наименование Размер, байт Диапазон значений byte 1 0…255 sbyte 1 –128 … 127 1 Здесь и далее все значения даются для среды программирования Microsoft Visual C# 2008 Express Edition. 6 Продолжение таблицы 1.1 Наименование Размер, байт Диапазон значений char 1 2 от U+0000 до U+ffff short 2 –32,768 … 32,767 ushort 2 0 … 65 535 int 4 –2 147 483 648 … 2 147 483 647 uint 4 0 … 4 294 967 295 long 8 –9 223 372 036 854 775 808 … 9 223 372 036 854 775 807 ulong 8 0 … 18 446 744 073 709 551 615 Вещественные типы данных. Применяются для хранения данных, имеющих дробную часть. В отличие от целочисленных типов, вещественные типы данных от- личаются друг от друга не только диапазоном хранимых значений, но и точностью представления числа. Характеристики вещественных типов данных приведены в таблице 1.2. Таблица 1.2 – Характеристика вещественных типов данных Наименование Размер, байт Приблизительный диапазон значений Число десятичных знаков float 4 От ±1,5e−45 до ±3,4e38 7 double 8 От ±5,0e−324 до ±1,7e308 15-16 Десятичный тип данных decimal предназначен для применения в финансо- вых расчётах. Этот тип имеет разрядность 16 байт для представления числовых зна- чений в пределах от ±1,0e−28 до ±7,9e28. При обычных арифметических вычисле- ний с плавающей точкой характерны ошибки округления десятичных значений. Эти ошибки исключаются при использовании типа decimal , который позволяет пред- ставить числа с точностью 28-29 десятичных разрядов. Благодаря тому что этот тип данных способен представлять десятичные значения без ошибок округления, он особенно удобен для расчётов, связанных с финансами. Логический тип данных имеет наименование bool и может принимать одно из двух значений: true (истина) или false (ложь). Символьный тип данных, предназначенный для хранения одного символа Юникода, имеет наименование char . Символ задаётся в апострофах (одиночных ка- вычках). Строковый тип данных имеет наименование string и предназначен для хранения последовательности символов (данный тип будет рассмотрен ниже в от- дельном разделе). Строковые константы задаются в кавычках. Составные и более сложные типы данных будут рассмотрены ниже. 1 В большинстве случаев используется для хранения символьных данных. Для целочисленных значений луч- ше не использовать. 7 Числовые типы данных обладают некоторыми методами и полями, среди ко- торых можно выделить: Parse(s) – преобразует строку s в число соответствующего типа, например int.Parse("1") преобразует строку «1» в число 1 типа int . В методе Parse могут быть указаны дополнительные параметры, характеризующие допустимые для преобразования форматы строки s ; TryParse(s, out r) – преобразует строку s в число соответствующего типа и записывает результат в r . Метод возвращает логическое значение, показывающее, было ли выполнено преобразование. В методе TryParse могут быть указаны до- полнительные параметры, характеризующие допустимые для преобразования форматы строки s . Например double.TryParse("1.2", out d) вернёт true , если разделителем дробной и целой части является точка. MinValue, MaxValue – возвращает минимальное или максимальное значение для заданного типа, например int.MaxValue вернёт максимальное значение для типа int |