Страницы

Поиск по вопросам

среда, 21 ноября 2018 г.

Полиморфизм подтипов

Что из себя представляет полиморфизм подтипов в C#? Как его реализовать?


Ответ

Полиморфизм подтипов -- это то, что обычно понимают под полиморфизмом в объектно-ориентированном программировании. Он заключается в том, что вызывающий код использует объект, опираясь только на его интерфейс (контракт), не зная при этом фактического типа. Такой подход позволяет подтипам реализовывать свое поведение и т.о. изменять поведение программы без перекомпиляции кода-клиента. Возьмем пример из Википедии:
public abstract class Animal { public abstract String Talk(); }
public class Cat : Animal { public override String Talk() { return "Meow!"; } }
public class Dog : Animal { public override String Talk() { return "Woof!"; } }
public class Program { private static void Write(Animal animal) { Console.WriteLine(animal.Talk()); }
public static void Main(String args[]) { Write(new Cat()); Write(new Dog()); } }
Здесь класс Animal -- это базовый тип, объявляющий интерфейс (контракт). Интерфейс состоит всего из одного метода. Далее у нас есть два дочерних класса -- Cat и Dog, каждый из которых переопределяет метод Talk своим собственным поведением, соответствующим этому классу.
Метод Program.Write является в данном случае клиентом -- он принимает на вход объект типа Animal и вызывает метод Talk. При этом он не знает ничего о фактическом типе объекта, а пользуется только объявленным интерфейсом. Подсовывая ему экземпляры разных типов -- Cat и Dog -- мы получаем разное поведение (на консоль выводится разный текст).

Комментариев нет:

Отправить комментарий