Полиморфизм в объектно-ориентированном программировании, включая и C# — это, по-видимому, одно из самых мощнейших свойств, с которым мы будем очень часто встречаться на практике. Если говорить максимально просто, то полиморфизм в ООП — это возможность использовать в классах-потомках методы и свойства предков. Используя полиморфизм, мы можем объявить переменную класса предка, однако присвоить ей значение (инициализировать объект) потомка. Попробуем разобраться на примере.
Пример полиморфизма в C#
У нас уже есть два класса — это Building (здание) и House (дом). При этом House — это потомок класса Building (см. статью про наследование). Используя полиморфизм, мы можем сделать следующий «финт»:
//обратите внимание на тип данных и инициализацию объекта
Building building = new House
{
Height = 5,
Length = 15,
Width = 20,
WindowCount = 5
};
У класса House есть свое собственное свойство — WindowCount. Чтобы им воспользоваться мы должны написать код следующим образом:
((House)building).WindowCount = 3;
То есть, в скобках перед переменной мы подсказываем компилятору, что в переменной building находится именно дом, а не абстрактное здание. Такая запись — это ни что иное как приведение типов о котором мы уже немного говорили при изучении основ C#.
В C# кругом одни объекты
В C# все классы наследуются от Object. Object — это самый-самый базовый класс, содержащий только самые основные свойства и методы присущие абсолютно всем классам в C#, включая и ваши собственные. Поэтому, используя полиморфизм мы можем пойти ещё дальше и сделать вот так:
Object newBuilding = new House(); ((House)newBuilding).WindowCount = 3;
Как видите, мы воспользовались самым, что ни есть базовым классом для описания типа переменной, но проинициализировали её как свой собственный класс и программа прекрасно скомпилируется и выдаст результат. На данный момент вам может показаться, что полиморфизм — это какая-то бесполезная вещь. Однако, уверяю вас, по мере изучения возможностей языка C# вы поймете, что полиморфизм крайне важен и необходим в современных языках программирования.
Итого
Как было сказано выше, полиморфизм — это очень и очень мощное свойство ООП и с полиморфизмом в C# мы ещё столкнемся множество раз, когда будем учиться работать, например, с событиями объектов. Представленные выше примеры лишь приоткрывают для нас возможности этого механизма в ООП.