Вступ до поліморфізму в C #
Поліморфізм - один із принципів об’єктно-орієнтованого програмування. Полі означає, що множинні та морфіруючі засоби піддаються трансформації, поліморфізм, таким чином, означає здатність приймати декілька форм.
Вихід операторів змінюється в залежності від типів операндів, що є формою поліморфізму, відомої як перевантаження оператора. Тут оператор може приймати різні форми для отримання різних результатів. Вихід функцій змінюється залежно від різних типів і параметрів повернення, що є ще однією формою поліморфізму, відомої як перевантаження функцій. Тут функція приймає кілька форм для отримання декількох виходів.
Поліморфізм широко використовується для здійснення спадкування. Об'єкти, що мають різну внутрішню структуру, можуть реалізувати спільний інтерфейс через поліморфізм. Наступна схема ілюструє роботу поліморфізму:
Ця цифра пояснює, що глина є материнським предметом, з якого виготовлені предмети з горщика, миски та іграшки. Усі ці предмети відрізняються один від одного, але мають властивості глини. Ці три об’єкти мають різну форму і використовуються по-різному, навіть коли вони виготовлені з одного і того ж матеріалу глини.
Форми поліморфізму
Нижче наведені 2 форми поліморфізму:
1. Перевантаження оператора
Оператор може дати різні виходи залежно від типу операндів, над якими він працює. Це називається перевантаження оператора. Наприклад, оператор "+" може виконувати додавання на два цілих числа, тоді як він може об'єднувати два рядки. Таким чином, одного і того ж оператора можна використовувати двома різними способами. Оператор додавання зазвичай додає два числа. Однак у випадку складних чисел додавання дещо інше, де відповідні дійсні частини та уявні частини додаються окремо. Ось приклад коду, який показує, як оператор "+" може бути перевантажений для додавання складних чисел:
Код:
using System;
namespace Overload (
class Complex
(
public double x;
public double y;
// no-argument constructor
public Complex() ()
// parameterized constructor
public Complex(double real, double img)
(
x = real;
y = img;
)
// Overloading of Binary "+" operator
public static Complex operator + (Complex c1,
Complex c2)
(
Complex c3 = new Complex();
c3.x = c1.x + c2.x;
c3.y = c1.y + c2.y;
return c3;
)
// function to display result
public void display()
(
Console.WriteLine("(0) + (1)i", x, y);
)
)
class CalNum (
// Driver Code
static void Main(string() args)
(
Complex num1 = new Complex(2.5, 3.5);
Complex num2 = new Complex(1.2, 6.5);
Complex num3 = num1 + num2;
Console.Write("c1 = ");
num1.display();
Console.Write("c2 = ");
num2.display();
Console.Write("c3 = ");
num3.display();
)
)
)
Вихід:
Цей вихід ілюструє перевантаження оператора, щоб додати два складних числа. Код показує перевантаження оператора, а також перевантаження функцій.
2. Функція Перевантаження
Функція може давати різні виходи залежно від кількості параметрів, а також типів їх повернення та типу повернення функції. Вищезгаданий код також охоплює перевантаження функцій за допомогою конструктора. У коді є 2 конструктори; один - конструктор за замовчуванням, який залишається порожнім, а інший - параметризованим конструктором, який використовується для ініціалізації комплексного числа зі значеннями, згаданими як параметри.
Беручи приклад, проілюстрований на рисунку, функція - це лиття глини, а напрямок ходу - член, передбачений для формування глини. На основі різних напрямків обведення глина перетворюється відповідно в горщик, миску та іграшку.
Код:
using System;
using System.Collections.Generic;
public class Clay
(
// A few example members
public int Height ( get; set; )
public int strokeDirection ( get; set; )
// Virtual method
public virtual void Mould()
(
Console.WriteLine("Beginning to mould the clay");
)
)
class Pot : Clay
(
public override void Mould()
(
// Code to make a pot Console.WriteLine("Making a pot");
base.Mould();
)
)
class Bowl : Clay
(
public override void Mould()
(
// Code to make a bowl
Console.WriteLine("Making a bowl");
base.Mould();
)
)
class Toy : Clay
(
public override void Mould()
(
// Code to make a toy
Console.WriteLine("Making a toy");
base.Mould();
)
)
class Program
(
static void Main(string() args)
(
// Illustrating Polymorphism #1: a Pot, Bowl and Toy
// can all be used wherever Clay is expected. No cast is
// needed because an implicit conversion exists from a derived
// class to its base class.
var items = new List
(
new Pot(),
new Bowl(),
new Toy()
);
// Polymorphism at work #2: the virtual method Mould is
// invoked on each of the derived classes, not the base class.
foreach (var item in items)
(
item.Mould();
)
)
)
Вихід:
Як ви, можливо, зазначали в коді, клас глини - це батьківський клас, чиї дитячі класи - це класи з горщика, іграшки та миски. Метод "Прес-форма" визначається в батьківському класі, а також дочірньому класі з тією ж підписом функції. Отже, коли створюється об’єкт дочірнього класу і він викликає метод Mold, метод базового класу переосмислюється методом дочірнього класу. Таким чином, ми бачимо вихід методу дочірнього класу. Вищевказаний код показує спосіб переосмислення та не перевантаження для ілюстрації поліморфізму.
Точки, які слід пам’ятати про поліморфізм у c #
- Перевантаження відрізняється від переосмислення. Перевантаження має різні підписи функцій, тоді як перезавантаження має однакові підписи функції
- Поліморфізм відноситься до зміни поведінки надкласу в підкласі.
- Спадкування означає використання структури та поведінки надкласу в підкласі.
Нижче наведено кілька ключових заходів:
- Поліморфізм є однією з основних парадигм об'єктно-орієнтованого програмування.
- Перевантаження функцій змінює функцію відповідно до типів повернення та параметрів функції у спадковому класі.
- Перевантаження оператора змінює визначення оператора відповідно до заданих параметрів.
- Поліморфізм використовується для його реалізації, вирішує під час запуску викликати метод дочірнього класу, використовуючи метод переосмислення.
Рекомендовані статті
Це посібник з поліморфізму в C #. Тут ми обговорюємо дві форми поліморфізму у C #, тобто перевантаження оператора та перевантаження функцій із зразковим кодом. Ви також можете переглянути наступну статтю, щоб дізнатися більше -
- Що таке StringBuilder в C #
- Конструктор копіювання в C #
- Що таке багатопотокове читання в C #?
- Що таке шаблон дизайну в C #?
- Типи конструктора в C # з реалізацією коду
- Повний посібник з багатопотокової роботи в C #