
- •Глава 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
Глава 8. Строки – объекты класса string
8.1. Строковые литералы
Для представления текстовой информации в C# используются объекты класса
string. Класс string "класс: string" представляет собой один из предопределённых
типов языка C#. В .Net Framework этому типу соответствует класс System.String.
Один из видов объектов класса string мы уже многократно применяли – это
строковые константы или строковые литералы.
Строковая константа или строковый литерал имеет две формы – обычный
(регулярный) строковый литерал (regular-string-literal) и буквальный строковый
литерал
"литерал:строковый литерал"
(verbatim-string-literal). До сих пор мы
использовали только обычную (регулярную) форму, традиционную для языков
программирования. Регулярный строковый литерал – это последовательность
символов и эскейп-последовательностей, заключенная в кавычки (не в апострофы).
В регулярных строковых константах для представления специальных символов
используются
те
же
эскейп-последовательности,
которые
применяются
в
константах
типа
char .
Обрабатывая
регулярный
строковый
литерал
"литерал:регулярный строковый литерал" , компилятор из его символов формирует
строковый
объект
и
при
этом
заменяет
эскейп - последовательности
соответствующими кодами (символов или управляющих кодов). Таким образом,
литералу
"\u004F\x4E\u0045\ttwo"
будет соответствовать строка, при выводе которой на экране текст появится в
таком виде:
ONE
two
Здесь \u004F – юникод символа `О`, \x4E – шестнадцатеричный код символа
`N`, \u0045 – юникод символа `E`, \t - эскейп-последовательность, представляющая
код табуляции
.
Буквальный строковый литерал начинается с префикса @, за которым в
кавычках размещается возможно пустая последовательность символов. Символы
такого литерала воспринимаются буквально, то есть в такой строке
не
обрабатываются эскейп-последовательности
"эскейп-последовательность" , а
каждый символ воспринимается как таковой.
В результате выполнения оператора:
Console.WriteLine(@"\u004F\x4E\u0045\ttwo");
на экране появится
\u004F\x4E\u0045\ttwo
Если в буквальном литерале необходимо поместить кавычку, то она
изображается двумя рядом стоящими кавычками.
Важно отметить, что буквальный литерал может быть размещён в коде
программы на нескольких строках и это размещение сохраняется при его выводе. В
тоже
время
попытка
перехода
на
новую
строку
с
помощью
эскейп-
последовательности \n в буквальном литерале будет безуспешной.
8.2. Строковые объекты и ссылки типа string
Каждый строковый литерал — это объект класса string. Класс string является
типом ссылок. Кроме литералов можно определить объекты класса string с
использованием конструкторов. (Конструктор
"конструктор"
– специальный
метод класса, предназначенный для инициализации объекта класса в процессе его
создания.) Конструкторы класса string позволяют инициализировать объекты-
строки несколькими способами.
Наиболее простая форма создания строки-объекта – применение строкового
литерала
в
качестве
инициализирующего
выражения
"выражение:инициализирующее выражение" . Пример:
string line1="Это строка 1"
;
После выполнения этого объявления создаётся ссылка line1 типа string, и она
ассоциируется со строковым литералом, который является объектом класса string.
Строковый объект можно создавать, используя массив символов:
char [ ] car ={'M', 'a', 'c', 'c', 'u', 'в'};
string line2 = new string (car);
В данном примере определён символьный массив. Представляющая его ссылка
car используется в качестве аргумента при обращении к конструктору класса string.
Значением создаваемого объекта будет строка "Массив". Чтобы получить строку,
содержащую один символ, используется конструктор с первым параметром типа
char и вторым параметром, равным 1.
Пример: string line3 = new string (‘W’,1);
line3 представляет строку "W".
Если нужна строка, содержащая последовательность одинаковых символов, то
применяется конструктор с двумя параметрами. Первый из них определяет нужный
символ, а второй – число его повторений.
Пример: string line4 = new string ('7',3);
В данном случае line4 это ссылка на строку "777".
Второй параметр может быть любым целочисленным выражением, поэтому
этот конструктор удобно применять в тех случаях, когда количество повторений
символа заранее неизвестно, то есть зависит от каких-то изменяемых при
выполнении программы данных.
Обратите внимание, что среди конструкторов класса string нет конструктора с
параметром типа string.
Строковые объекты, как создаваемые с применением конструкторов, так и
формируемые для представления строковых литералов, компилятор размещает в
куче. Ссылки на строки размещаются в стеке. Размер строки при определении
строкового объекта явно не указывается, он определяется автоматически при
инициализации. Ни размер строки, ни её содержимое не могут изменяться после
создания строки!!!
Если инициализация при объявлении строковой ссылки отсутствует, то ей
присваивается значение null, и ее нельзя использовать в выражениях до
присваивания ей конкретного значения. Пример ошибки:
string line;
line += "asdfg"; // ошибка компиляции
Кроме явного задания строковых литералов и применения конструкторов для
создания строковых объектов используют метод ToString() "метод: ToString()" .
Этот метод определён для всех встроенных типов. Например, значением выражения