Найти в Дзене

Полиморфизм в программировании на С#. Я могу быть таким, каким ты захочешь.

Всем Хай! Что такое полиморфизм? Немного покопавшись в этой теме, я для себя понял, что полиморфизм похож на перегрузку в функциях, которую я описывал в этой статье, когда делал игру "Пакман" Только в разрезе ООП это перегрузка в методах. И записывается она по-разному. Проще всего полиморфизм показать на примере кода. class Program { static void Main(string[] args) { Cat cat = new Cat("Борис"); Dog dog = new Dog("Барсик"); Frog frog = newFrog("Боб"); cat.Voice(); dog.Voice(); frog.Voice(); } } class Animals { protected string Name; public Animals(string name ) { Name = name; } public virtual void Voice() { Console.WriteLine(Name + " - Я не помню как говорить!"); } } class Cat : Animals { public Cat(string name) : base(name) { } public override void Voice() { Console.WriteLine(Name + ": Я мяукаю - Мяу!"); } } class Dog : Animals { public Dog(string name) : base(name) { } public override void Voice() { Console.WriteLine(Name + ": Я гавкаю - Гав!"); } } class Frog : Animals { public Frog(
Оглавление
Картинка скачена с Яндекс картинок.
Картинка скачена с Яндекс картинок.

Всем Хай! Что такое полиморфизм? Немного покопавшись в этой теме, я для себя понял, что полиморфизм похож на перегрузку в функциях, которую я описывал в этой статье, когда делал игру "Пакман" Только в разрезе ООП это перегрузка в методах. И записывается она по-разному.

Проще всего полиморфизм показать на примере кода.

class Program
{
static void Main(string[] args)
{
Cat cat = new Cat("Борис");
Dog dog = new Dog("Барсик");
Frog frog = newFrog("Боб");
cat.Voice();
dog.Voice();
frog.Voice();
}
}
class Animals
{
protected string Name;
public Animals(string name )
{
Name = name;
}
public virtual void Voice()
{
Console.WriteLine(Name + " - Я не помню как говорить!");
}
}
class Cat : Animals
{
public Cat(string name) : base(name) { }
public override void Voice()
{
Console.WriteLine(Name + ": Я мяукаю - Мяу!");
}
}
class Dog : Animals
{
public Dog(string name) : base(name) { }
public override void Voice()
{
Console.WriteLine(Name + ": Я гавкаю - Гав!");
}
}
class Frog : Animals
{
public Frog(string name) : base(name) { }
}

Благодаря этой программке мы узнаём как говорят животные😁.

Мы создали 4 класса. Один класс общий или родительский «class Animals». Из него мы будем делать наследование. И Три класса с определёнными животными «class Cat», «class Dog» и «class Frog».

Разбор родительского класса

Так как класс родительский, то и его название должно объединять всех животных, поэтому «Animals». Для простоты мы записываем в него одно поле, которое даёт имена животным.

protected string Name

Сразу засовываем его в конструктор, для простоты присваивания имени. О конструкторе я говорил в прошлой статье.

public Animals(string name)
{
Name = name;
}

И создаём метод для воспроизведения слов наших животных.

public virtual void Voice()
{
Console.WriteLine(Name + " - Я не помню как говорить!");
}

Но метод этот не обычный. Как вы заметили, в него мы добавили «virtual». На примере одного животного я объясню для чего это.

Разбор класса «Кот»

В класс Кота «class Cat» мы сразу наследуем поля и методы из родительского класса.

class Cat: Animals

Так как конструктор наследуется отдельно, то его мы тоже наследуем.

public Cat(string name) : base(name) { }

И теперь, то для чего эта статья. Мы этому животному прописываем то, что ему нужно сказать используя метод из родительского класса.

public override void Voice()
{
Console.WriteLine(Name + ": Я мяукаю - Мяу!");
}

Нам это позволяет сделать приставка «override» перед объявлением типа метода. Опять же повторюсь. Чтобы так можно было сделать, нам нужно в родительском классе, в метод прописать «virtual». А в классе, куда наследуем, мы пишем тот же метод что и в родительском классе только с приставкой «override».

Получается, мы переписали метод родительского класса только для определённого животного. Это и называется «Полиморфизм».

Всё тоже самое, изменив только то, что скажет собака, мы пишем и для собаки. А в лягушке мы не будем прописывать этот метод. Для сравнения.

Основной класс «Program»

Теперь в основном методе «Main» мы инициализируем наших животных и сразу даём им имена.

Cat cat = new Cat("Борис");
Dog dog = new Dog("Барсик");
Frog frog = new Frog("Боб");

Теперь при использовании одного, и того же метода для каждого животного мы получаем разные результаты.

cat.Voice();
dog.Voice();
frog.Voice();
Скриншот работы программы.
Скриншот работы программы.

Лично для меня стало более понятно понятие Полиморфизма. А для Вас? Напишите ответ в комментариях.

На этом разбор ООП для меня пока закончен. На самом деле в этой тематике ещё очень много чего нужно разобрать. Но я решил в этом разбираться сразу на практике. Почему? Писал в этом посте. Ну а я с Вами прощаюсь и перехожу к следующему этапу обучения. Вы со мной? Обязательно подписывайтесь на канал. Вместе веселей. Всем Пока!

#it #разработкаигр #программированиеснуля #программированиедляначинающих #какстатьпрограммистом #csharp #сишарп