
- •Глава 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
14.2. Объявления интерфейсов
Будем рассматривать интерфейсы "интерфейс" , объявления которых имеют
следующий формат:
модификатор_интерфейсаopt interfac
e
имя_интерфейса
спецификация_базы_интерфейсаopt
тело_интерфейсаopt
Необязательные модификаторы интерфейса
"модификатор:модификаторы
интерфейса"
это: new, public, protected, internal, private. Все перечисленные
модификаторы
"модификатор"
нам уже знакомы. Обратите внимание, что для
интерфейса нельзя использовать модификатор static.
interface – служебное слово
"служебное слово: interface" , вводящее
объявление интерфейса "объявление интерфейса" ;
Имя_интерфейса "имя_интерфейса" – идентификатор, выбираемый автором
интерфейса. Принято начинать имя интерфейса с заглавной буквы I, за которой
помещать осмысленное название, которое тоже начинается с заглавной буквы.
Спецификация_базы_интерфейса
"спецификация_базы_интерфейса"
–
предваряемый двоеточием список интерфейсов, производными от которых является
данный интерфейс. В отличие от наследования классов, где может быть только один
базовый класс, базовых интерфейсов может быть любое количество.
Тело_интерфейса
"тело_интерфейса"
– заключённая в фигурные скобки
последовательность деклараций (описаний или прототипов
"прототип" ) членов
интерфейса. Ими могут быть (как мы уже отметили):
декларация метода;
декларация свойства;
декларация индексатора;
декларация события.
В любую из перечисленных деклараций членов интерфейса может входить
только модификатор new "модификатор: new" . Его роль та же что и в декларациях
членов класса. Другие модификаторы в декларации членов интерфейса не входят.
По умолчанию все члены интерфейса являются открытыми, т.е. им приписывается
статус доступа, соответствующий модификатору public. Формат простейшег
о
объявления интерфейса "объявления интерфейса" (без спецификации базы):
Interface имя_интерфейса
{
тип имя_метода(спецификация_параметров);
тип имя_свойства{get; set;}
тип this [спецификация_индекса] {get; set;}
event обработчик_события имя_события;
}
Как видно из формата, ни один из членов интерфейса не содержит операторов,
задающих конкретные действия. В интерфейсе только прототипы
"прототип"
методов "прототип:прототипы методов" , свойств "прототип:прототипы свойств" ,
индексаторов "прототип:прототип индексаторов" , событий "прототип:прототипы
событий" . Прежде чем давать другие пояснения, приведём пример объявления
интерфейса (с прототипами методов и свойств):
Interface iPublication { // интерфейс публикаций
Void write(); // готовить публикацию
Void read(); // читать публикацию
string Title { set; get; } // название публикации
}
В данном примере интерфейс, с именем IPublication специфицирует
функциональность классов, которые могут представлять публикации – такие
объекты, как статья, доклад, книга. В соответствии с данным интерфейсом
публикации можно писать – у реализующих интерфейс классов должен быть метод
write(). Публикации можно читать – в интерфейсе есть прототип метода read().
Свойство Title должно обеспечивать получение и задание в виде строки названия
публикации.
Больше никаких возможностей (никакой функциональности) интерфейс
IPublication не предусматривает. Данный интерфейс не может ничего предполагать
о таких характеристиках публикаций как фамилия автора, год издания, число
страниц и т.п. Эти сведения могут появиться только у конкретных объектов тех
классов, которые реализуют интерфейс IPublication.
В объявлении интерфейса IPublication отсутствует модификатор доступа – п
о
умолчанию этот интерфейс доступен в том пространстве имён, которому
принадлежит его объявление. Для интерфейса IPublication не указана спецификация
базы,
то
есть
IPublication
не
является
наследником
никакого
другого
пользовательского интерфейса.
Членами интерфейса IPublication являются прототипы двух методов write(),
read(). Если сравнить их с объявлениями абстрактных методов в абстрактном
классе, то следует отметить отсутствие модификаторов. По-существу, метод
интерфейса, например, write() в IPublication играет роль абстрактного метода
класса, но модификатор abstract для прототипа метода в интерфейсе не нужен (и
будет ошибочен). Чуть позже мы покажем, что интерфейс является ссылочным
типом и можно объявлять ссылки–переменные с типом интерфейса. Такие ссылки
позволяют получать доступ к реализациям методов интерфейса. В этом отношении
прототип метода интерфейса "прототип:прототип метода интерфейса" выступает в
роли виртуальной функции базового класса. Однако, модификатор virtual в
интерфейсе нельзя использовать в прототипе метода. Так как допустимо
наследование интерфейсов (мы его пока не рассматривали), то следует обратить
внимание на невозможность появления в прототипе метода интерфейса и
модификатора override. (Модификатор new допустим.)
Всё сказанное об особенностях деклараций методов относится и к членам-
свойствам и членам-индексаторам интерфейса.