Что из себя представляет полиморфизм подтипов в 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 -- мы получаем разное поведение (на консоль выводится разный текст).
Комментариев нет:
Отправить комментарий