Для чего нужен полиморфизм? Я понял что такое:
Инкапсуляция — Наследование — Полиморфизм — Абстракция
Я понял для чего:
Инкапсуляция — Наследование — Абстракция
Но я не понял зачем и для чего — ПОЛИМОРФИЗМ
И не понимаю суть примеров которые приводят:
Создают новую функцию в которую помещается вызов определенного метода...
А ведь я могу и без написания доп функции обращаться к ее методу и исходя из примера так даже кода будет меньше.

3 Апр 2020 в 19:48
201 +1
0
Ответы
1

Без показа кода про новую функцию непонятно. Полиморфизм дает две выгоды, см. пример ниже:

1. Наследуемся от базового класса Shape, создаем три производных класса. В цикле будут автьоматически вызываться производные классы, хотя List имеет тип базового.

2. Виртуальные функции, это тоже относится к полиморфизму

public class Shape

{

// Virtual method

public virtual void Draw()

{

Console.WriteLine("Performing base class drawing tasks");

}

}


public class Circle : Shape

{

public override void Draw()

{

// Code to draw a circle...

Console.WriteLine("Drawing a circle");

base.Draw();

}

}

public class Rectangle : Shape

{

public override void Draw()

{

// Code to draw a rectangle...

Console.WriteLine("Drawing a rectangle");

base.Draw();

}

}

public class Triangle : Shape

{

public override void Draw()

{

// Code to draw a triangle...

Console.WriteLine("Drawing a triangle");

base.Draw();

}

}

Для обновления поверхности рисования используйте цикл foreach, чтобы выполнить итерацию списка и вызвать метод Draw на каждом объекте Shape в списке. Несмотря на то, что каждый объект в списке имеет объявленный тип Shape, будет вызван тип времени выполнения (переопределенная версия метода в каждом производном классе).

// Polymorphism at work #1: a Rectangle, Triangle and Circle

// can all be used whereever a Shape is expected. No cast is

// required because an implicit conversion exists from a derived

// class to its base class.

var shapes = new List<Shape>

{

new Rectangle(),

new Triangle(),

new Circle()

};


// Polymorphism at work #2: the virtual method Draw is

// invoked on each of the derived classes, not the base class.

foreach (var shape in shapes)

{

shape.Draw();

}

/* Output:

Drawing a rectangle

Performing base class drawing tasks

Drawing a triangle

Performing base class drawing tasks

Drawing a circle

Performing base class drawing tasks

*/

В C# каждый тип является полиморфным, так как все типы, включая пользовательские, наследуют Object.

7 Апр 2020 в 02:12
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 548 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир