Полиморфизм в объектно-ориентированном программировании, включая и 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# мы ещё столкнемся множество раз, когда будем учиться работать, например, с событиями объектов. Представленные выше примеры лишь приоткрывают для нас возможности этого механизма в ООП.