Классы и объекты C#: полиморфизм

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

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии