Назад Вперед Содержание

Интерфейсы 

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

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

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

Интерфейсы не могут существовать сами по себе.

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

У класса может быть несколько интерфейсов, и несколько классов могут поддерживать один и тот же интерфейс. С помощью интерфейсов можно включить поведение из нескольких источников в классе. Эта возможность важна в C#, поскольку язык не поддерживает множественное наследование классов.

Синтаксис определения интерфейса

interface интерфейс {
    тип метод(аргументы);
    тип свойство { get; set;}
}

Т. е. интерфейсы объявляются похожим на классы способом, только вместо ключевого слова class используется ключевое слово interface. Например:

interface IMylnterface { // члены интерфейса }

Ключевые слова для модификации доступа public и internal используются точно так же. Все методы интерфейса по определению являются открытыми, при этом запрещено использовать в определении методов модификаторы доступа. Для того, чтобы сделать интерфейс общедоступным, следует использовать ключевое слово public:

public interface IMylnterface { // члены интерфейса }

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

В интерфейсе нельзя объявлять поля, но можно объявлять свойства. Свойства не описываются полностью, а только декларируются.

Реализация классом интерфейса

  1. после имени класса, реализующего интерфейс, поставьте двоеточие и напишите имя интерфейса (если в классе необходимо реализовать несколько интерфейсов, следует разделить их имена запятыми);
  2. включите в класс все методы и свойства, определенные в интерфейсе;
  3. для каждого реализованного метода и свойства укажите модификатор доступа public.

Доступ к интерфейсу объекта

  1. явное приведение типа - (интерфейс)объект;
  2. с помощью ключевого слова as - объект as интерфейс;
  3. с помощью ключевого слова is - if (объект is интерфейс).

Наследование интерфейсов

interface потомок: родитель {}

Пример 1

Создадим интерфейс IFigure, от которого производим два класса - Сircle (класс окружность) и Triangle (треугольника).

В классе IFigure создадим:

В дочернем классе Triangle:

В дочернем классе Circle:

В классе Program

Отработка

Пример 2

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

Для детского сада объем содержимого фонда делится на количество детей.Для детского дома объем содержимого фонда плюс спонсорские пожертвования делится на количество воспитанников детского дома.

Создадим интерфейс IStat со свойством размер фонда и методами вычисления матпомощи одному ребенку и выдачи информации об этой операции.

Создадим два класса - Kindergarten(класс детский сад), который реализует этот интерфейс, и Orphanage(детский дом)с дополнительным полем объем спонсорской помощи, который является дочерним от Kindergarten.

В классе Program

Отработка

Пример из раздела 5.1

Реализуем этот же проект, используя интерфейсы.

Создадим класс Point, содержащий координаты центра.

Создадим интерфейс IShape, который будут реализовать два класса - Circle (класс окружностей) и Square (класс квадратов).

В интерфейсе Shape объявим следующие члены интерфейса:

В дочернем классе Square:

В дочернем классе Circle:

В классе Program

Отработка

Назад Вперед Содержание