Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Лекция 16. Интерфейсы. Использованием интерфейсов

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

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

После того как интерфейс определен, его можно реализовать в некотором классе. Это означает, что класс будет поддерживать все свойства и члены, определяемые данным интерфейсом. Интерфейсы не могут существовать сами по себе. таким же образом, как создается экземпляр класса. У интерфейса нет кода, который бы реализовал его члены; он просто описывает эти члены. Их реализация должна находиться в классах, в которых реализован данный интерфейс.

Итак, интерфейс представляет собой альтернативу абстрактному классу в смысле создания контрактов между классами и их пользователями. Эти контракты создаются с использованием ключевого слова interface, которое объявляет ссылочный тип, инкапсулирующий контракт. Синтаксически интерфейс подобен классу, имеющему только абстрактные методы. Абстрактный класс является базовым для семейства производных классов, в то время как интерфейсы задуманы для “смешивания” их с прочими деревьями наследования. Когда класс реализует интерфейс, он должен реализовать все методы этого интерфейса. По сути дела, он соглашается выполнить контракт, определенный интерфейсом.

Правила использования интерфейсов:

oНельзя "создать экземпляр интерфейса"

oИнтерфейс не может содержать в себе никакого кода

oУ класса может быть несколько интерфейсов, и несколько классов могут поддерживать один и тот же интерфейс.

oУ интерфейсов нет никаких конструкторов

oОпределению интерфейса не разрешено содержать перегрузки операций

oНе допускается указывать никаких модификаторов доступа, а также модификаторов virtual,static

Рассмотрим интерфейсы за счет представления полного определения одного из интерфейсов, определенного Microsoft - System.IDisposable. Интерфейс IDisposable содержит один метод Dispose (), предназначенный для деинициализации классами, которые выполняют очистку кода:

public interface IDisposable

{

void Dispose ();

}

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

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

Определению интерфейса также не разрешено содержать перегрузки операций.

Также не допускается указывать модификаторы при определении членов интерфейса. Члены интерфейса всегда неявно являются public и не могут быть virtual или static.

Вернемся к определению интерфейса IDisposable. Если класс объявляет, что он реализует метод Dispose (), то он должен будет реализовать интерфейс IDisposable, что в терминах С# означает, что он наследуется от IDisposable.

//Этот класс ДОЛЖЕН содержать реализацию метода IDisposable.Dispose(),иначе-ERROR!

class my: IDisposable

{

public void Dispose() { // реализация метода Dispose() }

// остальная часть класса …

}

В этом примере если класс my будет наследовать IDisposable, но не будет содержать реализации Dispose (), в точности совпадающей с сигнатурой, определенной в интерфейсе IDisposable, будет выдана ошибка компиляции, поскольку в этом случае класс нарушит контракт реализации интерфейса.

IDisposable - сравнительно простой интерфейс, потому что определяет только один метод. Большинство интерфейсов содержат большее число методов.

Другим хорошим примером интерфейса является тот, который представляет цикл foreach в С#. В принципе цикл foreach внутри работает так, что опрашивает объект на предмет того, реализует ли он интерфейс System. Collection. IEnumerable. Он работает так, то компилятор C# вставляет в IL-код, использующий методы этого интерфейса для прохода по всем членам коллекции. Если же нет, foreach генерирует исключение.

<== предыдущая лекция | следующая лекция ==>
Болезни беременности | I. Thematische Gruppe
Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 390; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.