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

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

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

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

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

public class Shape

{

// Virtual method

public virtual void Draw

{

Console.WriteLine"Performingbaseclassdrawingtasks""Performing base class drawing tasks""Performingbaseclassdrawingtasks";

}

}


public class Circle : Shape

{

public override void Draw

{

// Code to draw a circle...

Console.WriteLine"Drawingacircle""Drawing a circle""Drawingacircle";

base.Draw;

}

}

public class Rectangle : Shape

{

public override void Draw

{

// Code to draw a rectangle...

Console.WriteLine"Drawingarectangle""Drawing a rectangle""Drawingarectangle";

base.Draw;

}

}

public class Triangle : Shape

{

public override void Draw

{

// Code to draw a triangle...

Console.WriteLine"Drawingatriangle""Drawing a triangle""Drawingatriangle";

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 varshapeinshapesvar shape in shapesvarshapeinshapes

{

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
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир