- •Типы данных
- •Переменные
- •Операции c#.
- •Линейная программа
- •Циклы с предусловием
- •Цикл с постусловием.
- •Исключения.
- •Двумерные массивы.
- •Символы и строки.
- •Деструктор.
- •Свойства
- •Конструктор класса – инициализирует поля. Индексатор.
- •Операции класса
- •Поля методы и свойства класса.
- •Виртуальные методы
- •Перегрузка методов.
- •Рекурсивные методы.
- •Interface (Интерфейсы)
- •Стандартные интерфейсы .Net
- •Клонирование объектов.
- •Абстрактный класс.
- •Бесплодные классы.
- •Класс Object.
- •Структуры
- •Структурное программирование.
- •Потоки файлов.
- •Потоки байтов
- •Потоки символов
- •Отладка программы.
- •Классификация ошибок
- •Методы отладки
- •Методика отладки по
- •Исправление ошибки.
- •Стадия разработки программ и программной документации.
- •Двоичные потоки
- •Тестирование программных продуктов.
- •Сериализация (сохранение объектов)
- •Структурный подход при проектировании программного обеспечения.
- •Объектно-ориентированное проектирование
- •Диаграммы вариантов использования
- •Составление программной документации
- •Руководство пользователя
- •Типы пользовательских интерфейсов и этапы их разработки
- •Этапы разработки пользовательского интерфейса
- •Модульное программирование
- •Сцепление модулей
- •Связность модулей
Interface (Интерфейсы)
Синтаксис интерфейса аналогичен синтаксису класса, [атрибуты] [спецификаторы] interface имя_интерфейса[предки]
{тело}
Для интерфейса могут быть использованы спецификаторы:
New, public, protected, internal, private.
Спецификатор new – используется для вложенных интерфейсов, остальные спецификаторы управляют видимостью интерфейса, по умолчанию интерфейс доступен только из сборки, в которой он описан. Интерфейс может наследовать свойства нескольких интерфейсов. В этом случае предки перечисляются через запятую. Тело интерфейса составляют абстрактные методы, шаблоны свойств и индексаторов, а также события. Интерфейс не может содержать константы, поля, операции конструкторы, деструкторы типы, и любые статические элементы. В интерфейсе имеет смысл задавать заголовки тех методов и свойств, которые будут по-разному реализованы различными классами разных иерархий. Элементы интерфейса имеет спецификатор public. Все элементы интерфейса должны быть абстрактными. Класс, в списке предков которого задается интерфейс, должен определять все его элементы потомок абстрактного класса может не переопределять часть абстрактных методов предка. Класс может иметь в списке предков несколько интерфейсов при этом он должен определять все их методы. Для реализуемых элементов интерфейса в классе следует указывать спецификатор public. к этим элементам можно обращаться как через объект класса, так и через объект типа соответствующего интерфейса. В библиотеке .Net определено большое количество стандартных интерфейсов, которые описывают поведение объектов разных классов.
Стандартные интерфейсы .Net
В библиотеке .Net определено множество стандартных интерфейсов задающих желаемое поведение объектов. Например интерфейс IComparable задает метод сравнения объектов, что позволяет выполнить их сортировку. Реализация интерфейсов IEnumerable и IEnumerator позволяют просматривать содержимое объекта с помощью конструкции Foreach реализация интерфейса ICloneable позволяет клонировать объект интерфейс IComarable определен в пространстве имен System, он содержит один метод ComareTo возвращающий результат сравнения двух объектов – текущего и переданного ему в качестве параметра.
Метод должен возвращать 0, если текущий объект и параметр равны, отрицательное число, если текущий объект меньше параметра положительное число, если текущий объект больше параметра.
Сортировка по разным критериям.
Интерфейс IComparable определен в пространстве имен System.Collections он содержит один метод Compare возвращающий результат сравнения двух объектов переданных ему в качестве параметров. Принцип применения интерфейса состоит в том, что для каждого критерия сортировки объектов описывается небольшой вспомогательный класс, реализующий этот интерфейс. Объект этого класса передается в стандартный метод сортировки массива в качестве второго аргумента.
Клонирование объектов.
Клонирование – это создание копии объекта, копия объекта называется клоном, при присваивании одного объекта, ссылочного типа к другому копируется ссылка, а не сам объект. Если необходимо скопировать в другую область памяти поля объекта, можно воспользоваться методом memberwiseClone, который любой объект наследует от класса object. при этом объекты на которые указывают поля объекта, в свою очередь являющиеся ссылками не копируются, это называется поверхностным клонированием. Для создания полностью независимых объектов необходимо глубокое клонирование, когда в памяти создается дубликат всего дерева объекта, т.е. объектов на которые ссылаются поля объекта, поля полей и т.д. Алгоритм глубокого клонирования является сложным, так как требует рекурсивного обхода всех ссылок объекта и отслеживание циклических зависимостей. Объект имеющий собственные алгоритмы клонирования должен объявляться как наследник интерфейса ICloneable и переопределять его единственный метод Clone.
