
- •Глава 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
Int number;
do Console.Write("Введите целое положительное число: ");
while (!int.TryParse(Console.ReadLine(), out number)||number<=0);
int len = (int)Math.Log10(number) + 1;
char[] ciphers = new char[len];
int figure, i = len - 1;
do
{
figure = number % 10;
number = number / 10;
ciphers[i--] = (char)(figure + '0');
}
while (number != 0);
Console.Write(“Цифры числа:”);
foreach (char ch in ciphers)
Console.Write(" " + ch);
Console.WriteLine();
}
}
Результат выполнения программы:
Введите целое положительное число :rws<ENTER>
Введите целое положительное число: 975310<ENTER>
Цифры числа: 9 7 5 3 1 0
В программе int number – число, вводимое пользователем. Для чтения и
последующего преобразования введённой последовательности цифр в числовое
значение используются уже известные нам статические методы Console.ReadLine()
и int.TryParse(). Переменная int len в объявлении получает значение количества
цифр во введённом числе. Она определяет длину символьного массива, адресуемого
ссылкой ciphers. Переменная int figure последовательно принимает значения цифр
числа. Переменная int i служит индексом при записи в массив изображений цифр.
Обратите внимание на выражение (char)(figure+'0'). В скобках выполняется
сложение значения цифры (переменная figure) с кодом символа '0'. Тем самым
формируется числовой код символа, соответствующего значению цифры. Так как
элементы массива имеют тип char, то необходимо явное приведение типа (char).
После записи изображения каждой цифры в массив, индекс i уменьшается на 1.
Цикл foreach осуществляет прямой перебор массива ciphers[], и цифры на
экран выводятся в правильном порядке. Результаты выполнения программы
иллюстрируют сказанное.
Итак, мы убедились, что размер массива можно выбрать до его определения.
Однако как только массив (объект класса массивов) определён, его размер изменить
невозможно. Если размер нужно увеличить или уменьшить приходится сначала
создать новый массив нужных размеров, потом копировать в него значения
элементов имеющегося массива и уничтожить этот старый массив.
7.2. Массивы как наследники класса Array
Одномерные массивы
"массив:одномерные массивы"
наследуют из класса
Array несколько свойств и много методов, упрощающих работу с массивами.
Среди свойств следует в первую очередь назвать свойство int Length –
целочисленное (32 бита) значение, определяющее общее количество элементов
экземпляра массива (изменять его нельзя). Это свойство незаменимо в методах,
параметрами которых служат ссылки на массивы. Второе из полезных свойств – int
Rank – размерность (число измерений) массива.
Методы класса Array
"метод: Array"
позволяют решать многие типовые
задачи обработки массивов. Вот некоторые из статических методов, применяемые к
одномерным массивам:
static int BinarySearch() – бинарный поиск в упорядоченном массиве; результат
выполнения
–
индекс
соответствующего
условию
поиска
элемента
или
отрицательное число, если элемента с искомым значением в массиве нет
;
static void Сlear() – позволяет очистить (обнулить, присвоить значение
пробелов или значение null) все элементы массива или указанный параметрами
интервал его элементов;
static void Copy () – копирование части массива или всего массива в другой
массив;
static int IndexOf() – возвращает наименьший индекс (минимальный номер)
элемента, значение которого совпадает с образцом;
static int LastIndexOf() – возвращает последний индекс (максимальный номер)
элемента, значение которого совпадает с образцом;
static void Reverse() – меняет на обратный порядок элементов в массиве;
static void Sort() – выполняет сортировку элементов массива.
Необязательные параметры этого метода позволяют определить правило
упорядочения. По умолчанию арифметические массивы сортируются в порядке
возрастания значений элементов. Строки упорядочиваются лексикографически.
Нестатические методы (методы объектов) класса Array:
object Clone() – получение точной копии того массива-объекта "массив:копии
массива-объекта" , к которому применён метод. Возвращает ссылку на новый
массив (на копию), всегда имеющую тип оbject;
void CopyTo(Array, ind) – в массив Array копируются элементы вызывающего
массива, начиная с индекса ind;
int GetLength() – возвращает размер массива (число элементов) по указанному
аргументом измерению (номера измерений от нуля);
int GetUpperBound() – возвращает верхнюю границу индекса массива по
указанному аргументом измерению;
object GetValue() – возвращает значение указанного параметром элемента
массива;
void SetValue() – присваивает значение указанному параметром элементу.
Следующая программа иллюстрирует применение методов Clone(), Sort(),
Reverse().
// 07_04.cs массивы - методы класса Array
using System;
class Program
{
static void Main()
{
char[ ] hi = { '1', 'A', '2', 'B', '3', 'C', '4', 'D', '5', 'E', };
char[ ] hiNew = (char[ ])hi.Clone( ); // копирование
Array.Sort(hiNew); // сортировка
Console.Write("Сортировка: ");
foreach (char ch in hiNew)
Console.Write( ch);
Console.WriteLine();
Array.Reverse(hiNew); // реверсирование
Console.Write("Реверсирование: ");
foreach (char ch in hiNew)
Console.Write(ch);
Console.WriteLine();
Console.Write("Исходный массив: ");
foreach (char ch in hi)
Console.Write("" + ch);
Console.WriteLine();
}
}
Результат выполнения программы:
Сортировка: 12345ABCDE
Реверсирование: EDCBA54321
Исходный массив: 1A2B3C4D5E
В программе определён и инициализирован символьный массив и адресующая
его ссылка hi. Затем определена ссылка hiNew, и создана копия массива
"массив:копия массива" с помощью метода Clone(), который применён к объекту,
адресованному ссылкой hi. Так как метод Clone() возвращает ссылку на базовый
класс object, то выполнено явное приведение типов (char []). Только так можно
присвоить результат ссылке hiNew. Методом Array.Sort() выполнена сортировка
массива, связанного со ссылкой hiNew. Элементы упорядочены по возрастанию
целочисленных значений кодов символов. Далее выводятся отсортированный
массив и выполнена его обработка методом Reverse(). Обратите внимание, что
исходный массив остаётся без изменений.