Интерфейсом называется семейство методов и свойств, которые сгруппированы в единое целое и инкапсулируют какую-либо определенную функциональную возможность
Другими словами, интерфейс тип, определяющий набор методов и свойств без реализации, и используемый для определения классов со сходной функциональностью.
После того как интерфейс определен, его можно реализовать в некотором классе. Это означает, что класс будет поддерживать все свойства и члены, определяемые данным интерфейсом.
Интерфейсы не могут существовать сами по себе.
Мы не можем создать экземпляр интерфейса таким же образом, как мы создаем экземпляр класса. Кроме того, интерфейс не может содержать в себе никакого кода, который бы реализовал его члены; он просто описывает эти члены. Их реализация должна находиться в классах, в которых реализован данный интерфейс.
У класса может быть несколько интерфейсов, и несколько классов могут поддерживать один и тот же интерфейс. С помощью интерфейсов можно включить поведение из нескольких источников в классе. Эта возможность важна в C#, поскольку язык не поддерживает множественное наследование классов.
interface интерфейс { тип метод(аргументы); тип свойство { get; set;} }
Т. е. интерфейсы объявляются похожим на классы способом, только вместо ключевого слова class используется ключевое слово interface. Например:
interface IMylnterface { // члены интерфейса }
Ключевые слова для модификации доступа public и internal используются точно так же. Все методы интерфейса по определению являются открытыми, при этом запрещено использовать в определении методов модификаторы доступа. Для того, чтобы сделать интерфейс общедоступным, следует использовать ключевое слово public:
public interface IMylnterface { // члены интерфейса }
Тип интерфейса можно использовать в объявлении параметров методов и переменных, но создавать объекты типа интерфейс нельзя. Фактически это те же самые абстрактные классы, не содержащие объявлений данных-членов и объявлений обычных функций. Все без исключения функции — члены интерфейса – абстрактные.
В интерфейсе нельзя объявлять поля, но можно объявлять свойства. Свойства не описываются полностью, а только декларируются.
interface потомок: родитель {}
Создадим интерфейс IFigure, от которого производим два класса - Сircle (класс окружность) и Triangle (треугольника).
Отработка
Существует фонд помощи детским учреждениям, для каждого типа свой.Выписывается материальное содержание на каждого ребенка.
Для детского сада объем содержимого фонда делится на количество детей.Для детского дома объем содержимого фонда плюс спонсорские пожертвования делится на количество воспитанников детского дома.
Создадим интерфейс IStat со свойством размер фонда и методами вычисления матпомощи одному ребенку и выдачи информации об этой операции.
Создадим два класса - Kindergarten(класс детский сад), который реализует этот интерфейс, и Orphanage(детский дом)с дополнительным полем объем спонсорской помощи, который является дочерним от Kindergarten.
Отработка
Реализуем этот же проект, используя интерфейсы.
Создадим класс Point, содержащий координаты центра.
Создадим интерфейс IShape, который будут реализовать два класса - Circle (класс окружностей) и Square (класс квадратов).
Отработка