- •Глава 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 (string.Compare(res, hen, true,
new System.Globalization.CultureInfo("ru")) > 0)
res = hen;
Console.WriteLine(res);
Результат, выводимый на консоль:
Глухарь
Обратите внимание, что четвёртый параметр метода Compare() заменён в
вызове безымянным объектом класса CultureInfo, сформированным конструктором
класса в выражении с операцией new. Аргумент конструктора – литерная строка
"ru" – обозначение нужного алфавита (в данном примере – русского языка). Если
возвращаемый результат, больше нуля, то есть первая строка, именуемая ссылкой
res, лексикографически больше второй, то вторая строка, связанная со ссылкой hen,
принимается в качестве претендента на наименьшее значение.
8.9. Преобразования с участием строкового типа
Рассматривая
арифметические
типы,
мы
привели
правила
неявны
х
преобразований и операцию явного приведения типов:
(тип) первичное_выражение
К строковому типу неявные преобразования не применимы, и невозможно
использование операции явного приведения типов.
Как уже отмечалось, для всех типов существует метод ToString()
"метод:
ToString()" , унаследованный всеми классами от единого базового класса object.
Таким образом, значение любого типа можно представить в виде строки, например,
так:
int n = 8, m = 3;
Console.WriteLine(m.ToString()+n.ToString() + " попугаев");
Результат вывода на консоль:
38 Попугаев.
Для обратного преобразования из строки в значение другого типа можно
воспользоваться
статическими
методами
библиотечного
класса
Convert,
принадлежащего пространству имён System. Ещё один путь – применение
статического метода Parse() "метод: Parse()" или метода TryParse(). Указанные
методы (их применение кратко рассмотрено в главе 5) определены в каждом классе
предопределённого типа, за исключением класса object (в котором они не нужны).
Эти методы часто применяется при чтении данных из входного консольного потока.
Метод Console.ReadLine() возвращает в виде строки набранную на клавиатуре
последовательность символов. "Расшифровку" этой последовательности, то есть
превращение символьного представления во внутреннее представление (в код)
соответствующего значения, удобно выполнить с помощью метода Parse() или
TryParse(). Наиболее просто, но совсем небезопасно, применить метод Parse(),
например таким образом:
int res = int.Parse(Console.ReadLine());
В данном случае изображение целого числа в виде набранной на клавиатур
е
последовательности цифр (возможно со знаком) передаётся в виде строки как
аргумент методу Parse() класса int (иначе System.Int32). Задача метода –
сформировать код целого числа, которое станет значением переменной int res.
Особенность (и опасность) – в прочитанной строке не должно быть символов,
отличных от десятичных цифр и знака числа (+ или -). Перед изображением числа
и
после
него
могут
находиться
пробелы,
которые
будут
отброшены
(проигнорированы). Например, строка может быть такой:
"
- 240
"
Значением переменной res будет -240.
Как уже говорилось, при неверной строковой записи значения анализируемого
типа, метод Parse() генерирует исключение. При отсутствии в программе
операторов обработки этих исключений (а мы их ещё не рассматривали) программа
завершается аварийно.
Для решения той же задачи чтения из входной строки целочисленного
значения метод TryParse() можно применить так:
int res;
do Console.Write("Введите целое число: ");
while(int.TryParse(Console.ReadLine(),out res)==false);
В цикле с постусловием пользователю выводится приглашение "Введите целое
число: ". Набранную на клавиатуре последовательность символов считывает метод
Console.ReadLine(). Возвращаемая методом строка служит первым аргументом
метода TryParse() из класса int. Если строка является корректным изображением
целого числа, то его код присваивается аргументу res, а метод TryParse() возвращает
значение true. Тем самым цикл завершается. В противном случае параметр res
остаётся без изменений, метод TryParse() возвращает значение false, что приводит к
следующей итерации цикла. Цикл будет повторяться, пока пользователь не введёт
правильного изображения целого числа.
Методов преобразований для предопределённых типов в классе System.Conver
t
много и у них разные имена. Например, для преобразования строки в код
"преобразование строк в код" целого числа типа int предназначен метод:
Convert.ToInt32(строка);
При использовании преобразований в строке-аргументе должны быть только
символы, допустимые для представления того значения, к типу которого
выполняется преобразование. В противном случае возникает ошибочная ситуация,
генерируется исключение, и, если в программе не предусмотрена обработка этого
исключения, программа завершается аварийно. Приведём пример с одним из
методов класса Convert:
string sPi = "3,14159", radius = "10,0";
double circle = 2 * Convert.ToDouble(sPi) * Convert.ToDouble(radius);
Console.WriteLine("Длина окружности="+circle.ToString());
В примере определены две строки, содержащие изображения вещественных
чисел (типа double). Обратите внимание, что дробная часть строкового
представления каждого числа отделена от целой части запятой, а не точкой. Это
связано (как мы уже упоминали) с правилами локализации системы, в которой
исполняется программа. В Европе и России целая и дробная части числа
традиционно разделяются запятой. В инициализаторе переменной double circle
использованы два обращения к одному методу класса Convert. Возвращаемые этими
методами значения использованы для вычисления инициализирующего выражения.
Как догадался проницательный читатель, будет получено приближенное значение
длины окружности с радиусом 10. В аргументе метода Console.WriteLine( ) явно
выполнено (хотя это и не обязательно) преобразование значения circle к значению
типа string. На консоль будет выведено:
Длина окружности=62,8318
(Опять запятая в изображении числа!)
