- •Функции
- •Определение и использование функций Определение и использование базовой функции базовой функции
- •Перегрузка функций
- •Делегаты
- •Применение делегата для вызова функции
- •Классы Определение классов в с#
- •Определение членов
- •Конструкторы и деструкторы
- •Последовательность выполнения конструкторов
- •Интерфейсы
- •Реализация интерфейсов
- •Реализация интерфейсов в классах
- •Наследование
- •Полиморфизм
- •Полиморфизм интерфейсов
Полиморфизм интерфейсов
Ранее уже говорилось о том, что для группирования вместе связанных методов и свойств могут применяться интерфейсы. Создавать экземпляры интерфейсов таким же образом, как и экземпляры объектов, нельзя, но зато можно создавать переменную типа интерфейса и затем использовать ее для получения доступа к методам и свойствам, предоставляемым этим интерфейсом в объектах, которые его поддерживают.
Например, предположим, что вместо базового класса Animal метод EatFood() помещается в интерфейс по имени IConsume. Этот интерфейс могут поддерживать оба класса — Cow и Chicken, — но только в таком случае каждый из них должен обязательно иметь свою реализацию метода EatFood() (поскольку интерфейсы не содержат реализаций). После этого к этому методу станет можно получать доступ с помощью примерно такого кода:
Cow myCow = new Cow();
Chicken myChicken = new Chicken();
IConsume consumelnterface;
consumeInterface = myCow;
consumeInterface.EatFood();
consumeInterface = myChicken;
consumeInterface.EatFood();
Такой подход предоставляет простой способ для вызова множества объектов одинаковым образом и избавляет от зависимости от общего базового класса. В этом коде вызов consumeInterfасe. EatFood () будет приводить к вызову метода EatFood () либо класса Cow, либо класса Chicken, в зависимости от того, какой экземпляр будет присвоен переменной типа интерфейса.
Здесь важно обратить внимание на то, что производные классы наследуют интерфейсы, поддерживаемые их базовыми классами. В предыдущем примере интерфейс IConsume может поддерживаться как классом Animal, так и обоими классами Cow и Chicken. Запомните, что классы с общим базовым классом вовсе необязательно имеют общие интерфейсы и наоборот.