Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие СS_Шульга.doc
Скачиваний:
48
Добавлен:
12.02.2015
Размер:
703.49 Кб
Скачать

Глава 9. Итерфейсы

В программировании слово «Интерфейс» может иметь несколько значений. До этого момента открытые элементы класса мы называли его интерфейсом, так как именно через них осуществляется работа с объектами класса.

В данной лекции мы рассмотрим интерфейсы языка С#.

Интерфейс в С# - это абстрактный класс, содержащий только абстрактные методы.

Отличия интерфейса от абстрактного класса:

  • интерфейс не может содержать полей и обычных методов — все элементы интерфейса должны быть абстрактными методами;

  • методы интерфейса описываются без спецификатора доступа (по умолчанию имеют спецификатор доступа public);

  • класс, в списке предков которого задается интерфейс, должен определять все его элементы;

  • класс может иметь в списке предков несколько интерфейсов.

Синтаксис интерфейса аналогичен синтаксису класса:

[ атрибуты ] [ спецификаторы ] interface имя_интерфейса [ : предки ]

{тело_интерфейса }

Интерфейсы позволяют частично реализовать идею множественного наследования классов, что расширяет возможности языка. В языке C# фактически каждый класс может иметь несколько родителей - один полноценный класс, а остальные в виде интерфейсов, - в этом и состоит основное назначение интерфейсов.

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

В библиотеке классов .NETбольшое число интерфейсов, наследуя которые, классы получают полезные дополнительные свойства, некоторые из них будут рассмотрены ниже. Например, интерфейс IComparable задает метод сравнения объектов на больше-меньше, что позволяет выполнять их сортировку.

Пречислим правила описания интерфейсов.

  1. Для интерфейса могут быть указаны спецификаторы new, public, protected, internal и private.

  2. По умолчанию интерфейс доступен только из сборки, в которой он описан ( internal ).

  3. Интерфейс может не иметь или иметь сколько угодно предков-интерфейсов.

  4. Если интерфейс имеет несколько предков, то предки в заголовке интерфейса перечисляются через запятую.

  5. Тело интерфейса составляют абстрактные методы, шаблоны свойств и индексаторов, а также события.

В качестве примера рассмотрим интерфейс Ioutput, определяющий методы вывода на экран общих данных для всех членов университета, например вывод ФИО, даты рождения, номер паспорта и т.д.

Interface iOutput

{

Void outputName();

...

}

В интерфейсе могут быть заданы также шаблоны свойств. В этом случае в абстрактном свойстве следует указать какие из секций (get,set) должны присутствовать, например:

stingName{ get; set; }

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

namespace ConsoleApplication1

{