Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С# ЛЕКЦИИ.docx
Скачиваний:
4
Добавлен:
01.04.2025
Размер:
2 Мб
Скачать
☆

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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]