
- •Глава 10, описывающая классы как контейнеры их статических членов,
- •Глава 13 посвящена отношениям между классами (и их объектами). Особое
- •Глава 18 включена в книгу при подготовке второго издания. Она посвящен
- •Глава 1. Объектная ориентация программ
- •1.1. Типы, классы, объекты
- •1.2. Программа на c#
- •1.3. Пространство имен
- •1.4. Создание консольного приложения
- •Глава 2. Типы в языке c#
- •2.1. Типы ссылок и типы значений
- •2.2. Классификация типов c#
- •2.3. Простые типы. Константы-литерал
- •2.4. Объявления переменных и констант базовых типо
- •If implicit in int interface
- •Internal is lock long namespace
- •Volatile while
- •Глава 3. Операции и целочисленные выражения
- •3.1. Операции языка c#
- •3.2. Операции присваивания и оператор
- •3.4. Выражения с арифметическими операциями
- •3.6. Переполнения при операциях с целыми
- •Глава 4. Выражения с операндами базовых
- •4.1. Автоматическое и явное приведение арифметических типов
- •4.2. Особые ситуации в арифметических выражениях
- •4.3. Логический тип и логические выражения
- •4.4. Выражения с символьными операндами
- •4.5. Тернарная (условная) операция
- •Глава 5. Типы с# как классы платформы .Net
- •5.1. Платформа .Net Framework и спецификация cts
- •5.2. Простые (базовые) типы c# как классы
- •5.3. Специфические методы и поля простых типов
- •Глава 6. Операторы
- •6.1. Общие сведения об операторах
- •6.2. Метки и оператор безусловного перехода
- •6.3. Условный оператор (ветвлений)
- •If (логическое выражение) оператор_1
- •6.4. Операторы цикла
- •6.5. Операторы передачи управления
- •If (условие) break;
- •6.6. Переключатель
- •Int ball; // оценка в баллах:
- •Глава 7. Массивы
- •7.1. Одномерные массивы
- •Int [ ] integers
- •Int number;
- •7.2. Массивы как наследники класса Array
- •7.3. Виды массивов и массивы многомерные
- •Int [,] dots;
- •Int size;
- •7.4. Массивы массивов и непрямоугольные массивы
- •Int size;
- •7.5. Массивы массивов и поверхностное копирование
- •Int size;
- •Int size;
- •Глава 8. Строки – объекты класса string
- •8.1. Строковые литералы
- •8.2. Строковые объекты и ссылки типа string
- •242.ToString()
- •8.3. Операции над строками
- •8.4. Некоторые методы и свойства класса String
- •8.5. Форматирование строк
- •8.6. Строка как контейне
- •8.7. Применение строк в переключателях
- •8.8. Массивы строк
- •8.8. Сравнение строк
- •Int static Compare (string, string)
- •Int static Compare (string, string, Boolean,CultureInfo)
- •If (string.Compare(res, hen, true,
- •8.9. Преобразования с участием строкового типа
- •38 Попугаев.
- •8.10. Аргументы метода Main( )
- •8.11. Неизменяемость объектов класса String
- •Глава 9. Методы c#
- •9.1. Методы–процедуры и методы-функции
- •9.2. Соотношение фиксированных параметров и аргументов
- •Int iPart;
- •9.3. Параметры с типами ссылок
- •Int[ ] temp;
- •Int[ ] temp;
- •9.4. Методы с переменным числом аргументов
- •VarParams(a, b, c);
- •9.5. Перегрузка методов
- •9.6. Рекурсивные методы
- •4*Fact (3); {
- •9.7. Применение метода Array.Sort()
- •Int имя_функции(тип параметр_1, тип параметр_2)
- •If(условие 2) return -1; // порядок соблюдён
- •Глава 10. Класс как совокупность статических
- •10.1. Статические члены класса
- •10.2. Поля классов (статические поля)
- •Int X; // поле объектов класса
- •10.3. Статические константы
- •10.4. Статические методы
- •10.5. Статический конструктор
- •10.6. Статические классы
- •Глава 11. Классы как типы
- •11.1. Объявление класса
- •11.2. Поля объектов
- •11.3. Объявления методов объектов
- •11.4. Пример класса и его объектов
- •Int count; // текущее показание
- •1 ' Counter.Count' is inaccessible due to its protection leve
- •11.5. Ссылка this
- •Int numb;
- •11.6. Конструкторы объектов класса
- •Int p; // порядок - инициализация по умолчанию
- •Void reduce() // Приведение числа к каноническому виду.
- •11.7. Деструкторы и финализаторы
- •Глава 12. Средства взаимодействия с объектами
- •12.1. Принцип инкапсуляции и методы объектов
- •12.2. Свойства классов
- •Internal, private, static, virtual, sealed, override, abstract, extern
- •Internal protected
- •Int p; // инициализация по умолчанию
- •Void reduce() // "Внутренний" для класса метод
- •12.3. Автореализуемые свойств
- •12.4. Индексаторы
- •Int[] days; // часы по дням недели
- •Int search(string str) { // поиск слова
- •12.5. Индексаторы, имитирующие наличие контейнера
- •Глава 13. Включение, вложение и наследование
- •13.1. Включение объектов классов
- •13.2. Вложение классов
- •13.3. Наследование классов
- •13.4. Доступность членов класса при наследовании
- •13.5. Методы при наследовании
- •13.6. Абстрактные методы и абстрактные классы
- •13.7. Опечатанные классы и методы
- •13.8. Применение абстрактых классов
- •Глава 14. Интерфейсы
- •14.1. Два вида наследования в ооп
- •14.2. Объявления интерфейсов
- •Interface имя_интерфейса
- •Interface iPublication { // интерфейс публикаций
- •Void write(); // готовить публикацию
- •Void read(); // читать публикацию
- •14.3. Реализация интерфейсов
- •Interface iPublication { // интерфейс публикаций
- •Void write(); // готовить публикацию
- •Void read(); // читать публикацию
- •Interface iSeries {
- •Void setBegin(); // восстановить начальное состояние
- •Int GetNext { get; } // вернуть очередной член ряда
- •Int this[int k] {get;} // вернуть к-й член ряда
- •Interface iSeries // интерфейс числовых рядов
- •14.4. Интерфейс как ти
- •Interface iGeo { // интерфейс геометрической фигуры
- •Void transform(double coef); // преобразовать размеры
- •Void display(); // вывести характеристики
- •Interface iGeo {
- •Void transform(double coef); // преобразовать размеры
- •Void display(); // вывести характеристики
- •Ira.Transform(3);
- •Ira.Transform(3);
- •14.5. Интерфейсы и наследование
- •Interface iPublication // интерфейс публикаций
- •Interface iBase
- •Interface iBase {
- •Глава 15. Перечисления и структуры
- •15.1. Перечисления
- •15.2. Базовый класс перечислений
- •IsDe fined"
- •15.3. Структуры
- •15.4. Упаковка и распаковка
- •If (obj is Struct1)
- •If (ob is PointS)
- •If (ob is Double)
- •15.5. Реализация структурами интерфейсов
- •Interface iShape {
- •Interface iShape
- •Information(ci);
- •Information(sp);
- •Interface iImage {
- •Void display();
- •Interface iImage
- •Void display();
- •Глава 16. Исключения
- •16.1. О механизме исключений
- •16.3. Свойства исключений
- •16.4. Управление программой с помощью исключений
- •X; // Вводимое число.
- •16.5. Исключения в арифметических выражениях
- •16.6. Генерация исключений
- •If (!double.TryParse(input, out u))
- •If (!double.TryParse(input, out u)
- •16.7. Пользовательские классы исключений
- •Глава 17. Делегаты и события
- •17.1. Синтаксис делегатов
- •17.2. Массивы делегатов
- •Int X, y; // положение робота на плоскости
- •17.3. Многоадресные (групповые) экземпляры делегатов
- •Virtual
- •17.4. Делегаты и обратные вызовы
- •17.5. Анонимные методы
- •17.6. События
- •Int size; // размер массива
- •Int[ ] ar; // ссылка на массив
- •Int temp;
- •Глава 18. Обобщения
- •18.1. Обобщения как средство абстракции
- •18.2. Декларации обобщённых классов "декларация
- •18.3. Ограничения типизирующих параметров
- •Intemface iComparable {
- •Int CompareTo (object p);
- •18.4. Обобщённые структуры "обобщённые структуры"
- •18.5. Обобщённые интерфейсы "обобщённый интерфейс"
- •Int add(t X, t y); // прототип метода
- •18.6. Обобщённые методы "обобщённые методы"
- •18.7. Обобщённые делегаты "обобщённые делегаты"
- •Virtual
- •InnerException
- •Interface
If implicit in int interface
Internal is lock long namespace
new null object operator out
override params private protected public
readonly ref return sbyte sealed
short sizeof stackalloc staticstring
struct switch this throw true
try typeof uint ulong unchecked
unsafe ushort using virtual void
Volatile while
Следует отметить, что в табл. 2.2 не включены идентификаторы, которые
играют роль ключевых слов только в конкретном контексте. Примеры: into, set,
yield.
Познакомившись со списком служебных слов, читатель сразу же обнаружит
ошибку в следующем объявлении:
int try = 15; //ошибка в имени переменной!
Инициализирующее выражение чаще всего константа, однако, может быть
любым выражением, операнды которого имеют конкретные значения в момент
объявления переменной. По типу вычисляемого значения инициализирующее
выражение должно соответствовать типу создаваемой переменной.
Примеры объявлений переменных:
double pi2=6.28;
int два=2;
В объявлении переменной может отсутствовать инициализация. Однако, язык
С# очень строг и не допускает существования в программе переменных с
неопределёнными значениями. Поэтому после объявления переменной без её
инициализации необходимо каким-то образом присвоить ей значение. Обычно для
этого используют оператор присваивания:
имя_переменной = выражение;
Пример (удельный заряд электрона в единицах СГСЭ/г):
double electron_charge; // объявление
electron_charge=5.27e+17; // присваивание значения
В отличие от литералов
"литералов" \y "литерал" , которые сами по себе
представляют собственные значения и не требуют предварительных объявлений,
именованные константы
"именованные константы"
вводятся с помощью
конструкции:
const type name = expression;
Отличие от объявления переменной: наличие модификатора const и
обязательность инициализации.
Контрольные вопросы
Чем отличаются типы знаковые от беззнаковых.
Приведите примеры констант-литералов числовых (арифметических) типов.
Укажите назначение десятичного типа и правила записи его констант.
Назовите способы записи символьных констант.
Приведите примеры эскейп-последовательностей.
Назовите размеры (в битах) представления в памяти констант базовых типов.
Какие символы допустимы в идентификаторах C#?
Приведите примеры служебных слов языка C#.
Является ли идентификатор Main служебным словом?
Что такое инициализация переменной?
Чем именованная константа отличается от константы-литерала
?
Глава 3. Операции и целочисленные выражения
3.1. Операции языка c#
В предыдущей главе мы ввели понятие типа и рассмотрели классификацию
типов, принятую в языке C#. Привели сведения о предельных значениях констант и
переменных базовых типов. Тем самым для базовых типов определена совокупность
допустимых значений. Чтобы полностью охарактеризовать базовые типы, требуется
рассмотреть допустимые для них операции.
Набор операций языка C# весьма велик и рассматривать возможности каждой
из них мы будем постепенно по мере необходимости. Однако, предварительно
приведем список операций, разместив их в порядке уменьшения их приоритетов,
называемых ещё рангами и категориями (табл. 3.1 и 3.2)..
Таблица 3.1.
Операции "операции:базовые операции" , ассоциативные слева – направо.
Базовые (первичные) операции "базовые (первичные) операции" \y "операции" | |
. () [] ++ -- new typeof sizeof checked unchecked –> |
выбор члена (класса или объекта) вызов метода или делегата доступ по индексу (индексирование) постфиксный инкремент постфиксный декремент создание объекта ( создание экземпляра) идентификация типа определение размера операнда (только в опасном коде) контроль за переполнениями в выражениях отмена контроля за переполнениями в выражениях доступ к члену ( объекта ) по указателю (только в опасном коде) |
Унарные операции "унарные операции" \y "операции" |
+
-
++
--
~
!
(тип)
&
*
*
/
%
+
-
унарный плюс (задание знака)
унарный минус (задание знака)
префиксный инкремент
префиксный инкремент
поразрядное отрицание
логическое отрицание
приведение к заданному типу
получение адреса (только в опасном
коде)
разыменование указателя (только в
опасном коде)
Арифметические бинарные операции "операции:арифметические
бинарные операции"
умножение
деление
получение остатка при целочисленном
делении
сложение
вычитание
Операции поразрядных сдвигов "операции::поразрядных сдвигов" \y
"операции"
>>
<<
<
>
<=
>=
поразрядный сдвиг вправо
поразрядный сдвиг влево
Операции отношений (сравнений)
меньше
больше
меньше или равно
больше или равно
is
сравнение
типов
(
возвращает
as
==
!=
??
&
логическое значение)
проверка типов (возвращает тип или
null)
сравнение на равенство
сравнение на неравенство
Сравнение с null (поглощение null)
Поразрядные операции "операции:поразрядные операции" \y
"операции"
побитовое (поразрядное) И
^
побитовое
(
поразрядное
)
исключающее ИЛИ
|
&
побитовое (поразрядное) ИЛИ
Логические бинарные операции "операции:логические бинарные
операции" \y "операции"
конъюнкция (логическое И
)
|
^
&&
||
?:
=
+=
-=
*=
/=
%=
&=
^=
|=
>>=
дизъюнкция (логическое ИЛИ)
исключающая дизъюнкция
условная конъюнкция
условная дизъюнкция
Тернарная операция
"тернарная операция" \y "операции"
условная операция
Таблица 3.2
Операции присваивания (ассоциативные справа – налево)
присваивание
сложение с присваиванием
вычитание с присваиванием
умножение с присваиванием
деление с присваиванием
получение остатка от деления с
присваиванием
поразрядное И с присваиванием
поразрядное исключающее ИЛИ с
присваиванием
<<=
поразрядное
ИЛИ
с
присваиванием
поразрядный
сдвиг
вправо
с
присваиванием
поразрядный
сдвиг
влево
с
присваиванием
В таблице 3.1. операции объединены в группы. В каждую группу помещены
операции одного ранга. Операции из таблицы 3.1 выполняются слева направо, но это
справедливо только для операций одного ранга. Например, x*y/z будет вычисляться
в соответствии с выражением (x*y)/z.
Операции группы, размещенной выше, имеют более высокий ранг, нежели
операторы групп, размещенных ниже. Например, 2+6/2 равно 5, так как операция /
имеет
более
высокий
ранг,
нежели
бинарная
операция
+.
Начинающие
программисты, забывая о приоритетах операций, иногда ошибаются, приводя для
математического соотношения EMBED Equation.3
такое выражение: a/b*c. Его
следует записать, используя скобки: a/(b*c), или без скобок так a/b/c.