Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Екзамен з комп. арх..doc
Скачиваний:
4
Добавлен:
17.09.2019
Размер:
449.02 Кб
Скачать

17. Інтерфейси в мові c#. Порівняння з абстрактними класами. Сфера застосування інтерфейсів.

Интерфейсы описывают группу связанных функциональных возможностей, которые могут принадлежать к любому классу или структуре. Интерфейсы определяются с помощью ключевого слова interface :

interface IEquatable<T> { bool Equals(T obj); }

Интерфейсы содержат методы, свойства, события, индексаторы или любое сочетание этих перечисленных типов членов. Интерфейс не может содержать константы, поля, операторы, конструкторы экземпляров, деструкторы или типы. Он не может содержать статические члены. Члены интерфейсов автоматически являются открытыми, и они не могут включать никакие модификаторы доступа.

Когда класс или структура реализует интерфейс, класс или структура предоставляет реализацию для всех членов, определяемых интерфейсом. Сам интерфейс не предоставляет функциональных возможностей, которые класс или структура могут наследовать таким же образом, каким могут наследоваться функциональные возможности базового класса. Однако если базовый класс реализует интерфейс, производный класс наследует эту реализацию. Говорится, что производный класс неявно реализует интерфейс.

Классы и структуры реализуют интерфейсы таким же образом, как классы наследуются от базового класса или структуры, но есть два исключения:

  • Класс или структура может реализовать несколько интерфейсов.

  • Если класс или структура реализует интерфейс, она получает только имена и сигнатуры метода, поскольку в интерфейсе не содержится никаких реализаций.

Для реализации члена интерфейса соответствующий член класса должен быть открытым и не статическим, он должен обладать таким же именем и сигнатурой, как член интерфейса. Свойства и индексаторы класса могут определить дополнительные методы доступа для свойства или индексатора, определенного в интерфейсе. Например, интерфейс может объявлять свойство, имеющее метод доступа get. Класс, реализующий интерфейс может объявлять это же свойство get и set методами доступа. Если же свойство или индексатор использует явную реализацию, методы доступа должны совпадать.

Интерфейс имеет следующие свойства.

  • Интерфейс подобен абстрактному базовому классу: любой неабстрактный тип, реализующий интерфейс, должен реализовать все его члены.

  • Невозможно создать экземпляр интерфейса напрямую.

  • Интерфейсы могут содержать события, индексаторы, методы и свойства в качестве членов.

  • Интерфейсы не содержат реализации методов.

  • Как классы, так и структуры способны реализовывать несколько интерфейсов.

  • Интерфейс может быть унаследован от нескольких интерфейсов.

18. Огляд колекцій в .Net. Основні інтерфейси, що лежать в основі доступу до колекцій.

Платформа .NET Framework предоставляет программистам ряд стандартных интерфейсов для создания, перечисления и сравнения объектов классов коллекций. Основные из них:

IEnumerable - Составляет список объектов классов коллекций с помощью оператора foreach

ICollection - Реализуется всеми классами коллекций для обеспечения доступа к методу СоруТоО и свойствам Gojrt, IsSynchronized и SyncRoot

IComparer - Сравнивает два объекта классов коллекций при их сортировке

IList - Используется объектами классов коллекций, индексируемыми как массив

IDicticmary - Используется классами коллекций, осуществляющими доступ по ключу или значению, таких как Hast"table и SortedList

IDictionaryEnumerator - Позволяет просмотреть (с помощью оператора foreach) объекты классов коллекций, поддерживающих интерфейс IDictionary

ArrayList - Динамически изменяющий свой размер массив объектов

Hashtable - Представляет набор взаимосвязанных ключей и значений, основанных на хэш-коде ключа.

Queue - Стандартная очередь, реализованная по принципу FIFO (first-in-first-out, «первым пришел, первым ушел»)

Sorted List - Аналогично словарю, однако к элементам можно также обратиться по их порядковому номеру(индексу)

Stack - Очередь, реализованная по принципу LIFO (last-in-first-out, «последним пришел, первым ушел»), обеспечивающая возможности по проталкиванию данных в стек, выталкиванию данных из стека и считыванию данных